以编程方式将行添加到DataGridView

本文关键字:添加 DataGridView 编程 方式 | 更新日期: 2023-09-27 17:57:40

我有一个DatGridView,向其中添加新行。每行的第一列是一个图像,用于指示该行的其余部分是否已完成。为了跟踪这一点,每一行都附加了一个类似列表的对象,该对象统计已完成字段的数量,然后在完成足够的字段时更改图像。当用户在GUI中添加行时,这与预期的完全一样,但是当我尝试以编程方式添加新行时,会遇到问题。

当创建新行时,第一列中的DataGridViewImageCell将添加到跟踪已完成字段的自定义类中。

以下是添加新行的代码:

//initiate the new row
object[] buffer = new object[13];
buffer[0] = nullImage; //a blank image
for (int i = 1; i < buffer.Length; i++)
{
     buffer[i] = String.Empty;
}
rowID = DataGridView1.Rows.Add(buffer);

这是RowAdded代码:

    private void DataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
    {
        DataGridViewImageCell tmp = (DataGridViewImageCell)DataGridView1.Rows[DataGridView1.RowCount - 1].Cells[0];
        DataGridView1ValidateFields.AddRow(tmp); //custom class to keep track of completed fields
    }

自定义类包含一个DataGridViewImageCells-dgvic列表;这是它的AddRow方法:

    private List<object> dgvic = new List<object>();
    public void AddRow(DataGridViewImageCell p)
    {
        items.Add(new List<int>());//List of ints to keep track of completed fields
        dgvic.Add(p);
    }

当我进入调试器时(以编程方式添加行),我可以看到每次添加新行时,存储在dgvic中的DataGridViewImageCells都来自最近的行。例如,在添加3行之后,我希望3个DataGridViewImageCells来自第0、1和2行;然而它们都来自第2行。

在我看来,RowCount仍然与每个DataGridViewCell绑定,并且随着RowCount的增加,单元发生变化。如果是这样的话,它是如何通过GUI工作的呢?有人有什么想法吗?

以编程方式将行添加到DataGridView

按如下方式更改您的AddedRows事件:

private void DataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    int index = e.RowIndex;
    for (int i = 0; i < e.RowCount; i++)
    {
        DataGridViewImageCell tmp = (DataGridViewImageCell)DataGridView1.Rows[index].Cells[0];
        DataGridView1ValidateFields.AddRow(tmp);
        index++;
    }
}