我有一个带有DataGridView的表单。我格式化如下:
dgvECN.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
dgvECN.Columns(0).Width = 50
...
dgvECN.Columns(15).Width = 100
dgvECN.DefaultCellStyle.WrapMode = DataGridViewTriState.True
网格总是拥有比一个屏幕上显示的数据更多的数据,所以我依赖滚动条 - 主要是垂直方向。如果我用鼠标抓住滚动条并将其向下拖动到最远的位置,它可能会停止在向下的97%左右,就好像我已到达底部并且有更多行数据我没有'还没滚到。我可以释放滚动条并再次抓住它并向下拖动它会进一步下降,但不会一直向下。在第四次尝试(使用当前数据),它到达底部。
我可以按住滚动条底部的向下箭头,这样可行。我可以将光标/箭头向下或向下翻页到底部。当我做任何这些事情时,滚动手柄会向下抖动,然后向上调整,就像它重新计算一样。
我尝试使用以下方式显示数据底部的表单:
dgvECN.FirstDisplayedScrollingRowIndex = dgvECN.RowCount - 1
但是,将视图滚动到数据区域周围,网格似乎最初认为底部是,而不是实际的底部。
我认为这是我第一次使用在网格单元格中包装文本,所以我怀疑这是一个原因。
但是我一直在阅读和阅读,虽然我发现了大量异国情况的错误和错误,但最初听起来并不相关,但最终并不是我的问题,而且我找不到任何可以修复它的东西。
随意在评论中询问有关我的项目的具体信息,我不确定您可能需要帮助诊断这一点。谢谢你的时间!
ETA:.NET 4.0和VS Express 2013,万一重要。
ETA2:我试图设置有载显示,使其显示数据的底部而不是顶部。我这样做是为了:
dgvECN.CurrentCell = dgvECN.Item(0, dgvECN.Rows.Count - 1)
但实际上并没有把它带到数据的底部。我想这是同样错误的表现。
ETA3:这是当它加载当前单元格设置到底行时的样子:
ETA4:DataGridView Designer代码:
'
'dgvECN
'
Me.dgvECN.AllowUserToAddRows = False
Me.dgvECN.AllowUserToDeleteRows = False
Me.dgvECN.AllowUserToOrderColumns = True
Me.dgvECN.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.dgvECN.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill
Me.dgvECN.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders
Me.dgvECN.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.dgvECN.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.Check})
Me.dgvECN.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically
Me.dgvECN.Location = New System.Drawing.Point(3, 3)
Me.dgvECN.Name = "dgvECN"
Me.dgvECN.Size = New System.Drawing.Size(1102, 670)
Me.dgvECN.TabIndex = 5
答案 0 :(得分:2)
这是针对此问题的测试程序(用C#编写,但应该适用于VB)。它假设您有一个名为dataGridView1的DataGridView
。
AutoSizeRowsMode
属性应设置为DataGridViewAutoSizeRowsMode.AllCells
,以避免您遇到的问题。
DataTable data = new DataTable("Example");
data.Columns.Add("1");
data.Columns.Add("2");
data.Columns.Add("3");
data.Columns.Add("4");
for (int i = 0; i < 2000; i++)
{
data.Rows.Add(new []
{
"1",
"2",
"LONG STRING THAT SHOULD WRAP TO MULTIPLE LINES",
"4"
});
}
data.Rows.Add(new[]
{
"1",
"2",
"LONG STRING THAT SHOULD WRAP TO MULTIPLE LINES",
"Last Row!!!"
});
dataGridView1.AllowUserToAddRows = false;
dataGridView1.AllowUserToDeleteRows = false;
dataGridView1.AllowUserToOrderColumns = true;
dataGridView1.AutoSizeColumnsMode =DataGridViewAutoSizeColumnsMode.Fill;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders; // Appears that this line should be `AllCells` to avoid the problem you are facing
dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
dataGridView1.DataSource = data;