0

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
    }

カスタムクラスには、DataGridViewImageCellsdgvicのリストが含まれています。これがその'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);
    }

(プログラムで行を追加しているときに)デバッガーに入ると、新しい行を追加するたびに、DataGridViewImageCells格納されdgvicているすべてが最新の行のものであることがわかります。たとえば、3つの行を追加した後、3DataGridViewImageCellsつは行0、1、および2からのものであると予想します。ただし、それらはすべて行2からのものです。

まだそれぞれにRowCount関連付けられているように見えますが、増分するとセルが変化します。しかし、これが当てはまる場合、GUIを介してどのように機能するのでしょうか。誰かアイデアはありますか?DataGridViewCellRowCount

4

1 に答える 1

2

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++;
    }
}
于 2013-02-05T16:57:04.903 に答える