Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 管理DataGridView行的问题_C#_Winforms_Datagridview - Fatal编程技术网

C# 管理DataGridView行的问题

C# 管理DataGridView行的问题,c#,winforms,datagridview,C#,Winforms,Datagridview,快速介绍我的问题来源: 我有一个DataGridView,它是一个可调整大小的面板的子面板,可以通过用户的鼠标输入进行调整。调整面板的大小时,DataGridView的大小会随之镜像。其思想是,不是网格的列和行自动调整大小以适应单元格或网格空间的内容,而是列和行的数量将由网格的大小决定。行和列的宽度和高度是预先确定的,不需要调整。这样做的目的是让用户快速调整行和列的数量。这可以通过一段简短的代码片段得到最好的证明: 为了实现这一点,我检查面板是否正在调整大小,并且根据它是在收缩还是在增长,相应地

快速介绍我的问题来源:

我有一个
DataGridView
,它是一个可调整大小的
面板的子面板,可以通过用户的鼠标输入进行调整。调整
面板
的大小时,
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);
    }
}

没有行出现。。。我搞不懂这个问题。代码正在命中所有必需的行,并通过断点和单步执行进行验证。RowCount属性永远不会递增,也不会发出警报,因为整个过程都被包装在try-catch块中。没有与网格或重载默认行为的特殊函数相关联的绑定

问题在于打字(一个真正愚蠢的疏忽)
DataGridViewColumn
没有默认的单元格模板,因此尝试向列中添加行失败。使用
DataGridViewTextBoxColumn
将其清除

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);              
    }                
}