快速介绍我的问题的根源:
我有DataGridView
一个 resizable 的子Panel
对象,可以通过用户的鼠标输入进行调整。当Panel
调整大小时,DataGridView
的大小将随之镜像。这个想法是,不是网格的列和行自动调整大小以适应单元格或网格空间的内容,而是列和行的数量将由网格的大小决定。行和列的宽度和高度是预先确定的,不需要调整。这样做的目的是让用户快速调整行列数量。一个简短的代码片段可以很好地证明这一点:调整面板大小
为此,我检查面板是否正在调整大小,并且根据它是缩小还是增长,相应地调整列。这里有一些魔法,但它基本上看起来像这样:
if(panel_width_is_growing)
{
if(margin >= growing_threshold)
{
DataGridViewColumn column = new DataGridViewColumn();
column.Name = "Run " + (dataGridView.Columns.Count + 1).ToString();
column.HeaderText = "Run " + (dataGridView.Columns.Count + 1).ToString();
dataGridView.Columns.Add(column);
}
}
if(!panel_width_is_growing)
{
if(margin <= shrinking_threshold)
{
dataGridView.Columns.RemoveAt(dataGridView.Columns.Count - 1);
}
}
现在,这就是我的问题所在。我做了完全相同的事情来从网格中添加和删除行,尽管调整了边距和阈值来考虑行尺寸而不是列尺寸。唯一的区别是我正在查看面板的高度而不是宽度:
if(panel_height_is_growing)
{
if(margin >= row_threshold)
{
DataGridViewRow row = new DataGridViewRow();
row.HeaderCell.Value = (dataGridView.Rows.Count + 1).ToString();
dataGridView.Rows.Add(row);
}
}
并且没有出现任何行......我无法弄清楚这个问题。代码正在运行所有必要的行,并通过断点和单步执行验证。RowCount 属性永远不会增加,也不会发出警报,因为整个事情都包含在 try catch 块中。没有与网格相关的绑定或重载默认行为的特殊功能。