2

いくつかのフィールドをdatagridviewにバインドしています

myDataGridView.datasource = List(of MyCustomObject)

そして、私は手動でインデックスに触れることはありませんが、-1のインデックスには値がありません(したがって、範囲外のエラー)

グリッド内の任意の行を選択すると、onRowEnter()イベントでエラーが発生します。それは私のクリックを処理するための私のイベントのいずれにも入力されません、それは前にバグがあります...

インターフェイスで、クリックする直前に、グリッド2の行が(currentRow)ではないことがわかります。バグはそこから来ていると思いますが、currentRowを手動で設定する方法、または単にこのバグを回避する方法がわかりません...

誰もがこれを見たことがありますか?

編集-テストするコードをいくつか追加しました:

    dgvAssDet.CurrentCell = dgvAssDet.Rows(0).Cells(0)

この割り当てが実行されると、currentCell =なし、5行以上の列があります。

そして、同じエラーが発生しました。古いcurrentCellを変更する前に、それを取得しようとしますが、私の場合は何も発生せず、バグがあります...理由がわかりません。

4

1 に答える 1

2

DGVでデータソースを使用する場合は、コレクションを使用する必要がありますSystem.ComponentModel.BindingList<T>System.Collections.Generic.List<T>

public class MyObject
{
    public int Field1 { get; set; }
    public MyObject() { }
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        DataGridViewTest();
    }

    public void DataGridViewTest() {
        BindingList<MyObject> objects = new BindingList<MyObject>();
        dataGridView1.AutoGenerateColumns = true;
        dataGridView1.DataSource = objects;
        dataGridView1.AllowUserToAddRows = true;
        objects.Add(new MyObject() {
            Field1 = 1
        });

    }
}

オブジェクトリストがあなたのタイプであるList<T>場合、インデックスが範囲外のエラーになります。

于 2012-08-06T18:34:45.240 に答える