Panel
の中にDataGridView
がありますのでスムーズにスクロールできます。DataGridViewには最大サイズがありますか?
DataGridViewの高さは、行の高さに設定されています。
は、私は現時点ではe.ColumnIndexの== 0
が、私は約1700行をロードしていたときにのみ反応するDGVのCellContentClickイベントを持っています。約32569pxの高さにある約1489行後、これがイベントの発火をクリックできる最後の行です。
[編集] 02 May 2017 9:59 PM AU
何が起きているかを示すコードを追加してください。フォームには、AutoScrollをtrueに設定してカスタムパネル(下のコード)を追加し、スクロールバーをnoneに設定してDataGridViewを配置します。
パネルクラス
public class CustomPanel : System.Windows.Forms.Panel
{
protected override System.Drawing.Point ScrollToControl(System.Windows.Forms.Control activeControl)
{
// Returning the current location prevents the panel from scrolling to the active control when the panel loses and regains focus
return this.DisplayRectangle.Location;
}
}
データクラス
public class dgvRecord
{
public double ID { get; set; }
public string TYPE { get; set; }
public string NAME { get; set; }
public DateTime DATE { get; set; }
public dgvRecord() { }
}
フォームクラス
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace dgvInPanel
{
public partial class Form1 : Form
{
List<dgvRecord> recList = new List<dgvRecord>();
int normalRowHeight = 0;
public Form1()
{
InitializeComponent();
for (int rCount = 0; rCount < 1800; rCount++)
{
dgvRecord rec = new dgvRecord() { ID = 20170501000000, TYPE = "Asset", NAME = "Joe Bloggs", DATE = new DateTime(2017, 05, 02, 10, 30, 15) };
recList.Add(rec);
}
}
private void Form1_Shown(object sender, EventArgs e)
{
DataGridViewCellStyle imageCellStyle = new DataGridViewCellStyle();
imageCellStyle.SelectionBackColor = dgv.DefaultCellStyle.BackColor;
imageCellStyle.SelectionForeColor = dgv.DefaultCellStyle.ForeColor;
imageCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
DataGridViewCellStyle otherCellStyle = new DataGridViewCellStyle();
otherCellStyle.Alignment = DataGridViewContentAlignment.TopLeft;
dgv.AllowUserToResizeRows = false;
dgv.AllowUserToAddRows = false;
dgv.AllowUserToDeleteRows = false;
dgv.ReadOnly = true;
DataGridViewCell dgvc_ID = new DataGridViewTextBoxCell();
DataGridViewTextBoxColumn dgvTbxCol_ID = new DataGridViewTextBoxColumn()
{
CellTemplate = dgvc_ID,
Name = "ID",
HeaderText = "ID",
DataPropertyName = "ID",
DefaultCellStyle = otherCellStyle,
};
dgv.Columns.Add(dgvTbxCol_ID);
DataGridViewCell dgvc_TYPE = new DataGridViewTextBoxCell();
DataGridViewTextBoxColumn dgvTbxCol_TYPE = new DataGridViewTextBoxColumn()
{
CellTemplate = dgvc_TYPE,
Name = "TYPE",
HeaderText = "Type",
DataPropertyName = "TYPE",
AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells,
DefaultCellStyle = otherCellStyle,
};
dgv.Columns.Add(dgvTbxCol_TYPE);
DataGridViewCell dgvc_R_NAME = new DataGridViewTextBoxCell();
DataGridViewTextBoxColumn dgvTbxCol_R_NAME = new DataGridViewTextBoxColumn()
{
CellTemplate = dgvc_R_NAME,
Name = "R_NAME",
HeaderText = "Name",
MinimumWidth = 110,
DataPropertyName = "NAME",
DefaultCellStyle = otherCellStyle,
};
dgv.Columns.Add(dgvTbxCol_R_NAME);
DataGridViewCell dgvc_DATE = new DataGridViewTextBoxCell();
DataGridViewTextBoxColumn dgvTbxCol_DATE = new DataGridViewTextBoxColumn()
{
CellTemplate = dgvc_DATE,
Name = "DATE",
HeaderText = "Date",
MinimumWidth = 135,
DataPropertyName = "DATE",
DefaultCellStyle = otherCellStyle,
};
dgv.Columns.Add(dgvTbxCol_DATE);
dgv.DataSource = recList;
int dgvWidth = 0;
int dgvHeight = 0;
foreach (DataGridViewRow row in dgv.Rows)
{
if (dgvHeight == 0)
{
normalRowHeight = row.Height;
}
dgvHeight += row.Height;
}
dgvWidth = pnlCust.Width - 17;
dgv.Size = new Size(dgvWidth, dgvHeight);
dgv.DataSource = recList;
}
}
}
あなたはこれを実行すると、その一番上にあるセルをクリックしてコンテンツを選択してください。これは問題ありません。
もしあなたが下に行くなら、同じことをやってみてください。私はそれが選択を許さないと思っています。 これを引き起こす原因は何ですか?
[EDIT2] 03 5月2017 8:00 AM AU
DGVをパネルに配置する理由はスムーズなスクロールを得るためです。私がDGVでスムーズにスクロールすることができたら、私はそれを使用します。
すべての理論の代わりに、いくつかのコードは確かに役に立ちます –
'DataGridView's Height = 32569? – JohnG
この制限は、あなたのユーザーがまだあなたと話したいと思うポイントをかなり超えています。高さの制限はWindowsでは厳しい制限です。マウス通知メッセージは、XおよびYマウス座標を16ビット値でエンコードします。 DGVは単独でスクロールバーを表示できますので、これは必要ありません。 –