0

ソース クエリの列名を使用して、DataGridView 行のセルの値を取得しようとしています。DataGridView は BindingSource から設定されます (その DataSource プロパティが BindingSource に設定されているように)。

var obj = dataGridView1.CurrentRow.DataBoundItem;

var item = (DataRow)obj;

2 行目で InvalidCastException が発生します。

Unable to cast object of type 'System.Data.DataRowView' to type 'System.Data.DataRow'.
4

1 に答える 1

2

あなたのデータソースは DataTable だと思います。その場合、DataBoundItem の型は DataRow ではなく DataRowView になります。これは、DataGridView が DataTable の既定のビューを使用するという事実に基づいています。DataRow にアクセスする場合は、次のものが必要です。

        var obj = dataGridView1.CurrentRow.DataBoundItem;

        if (obj != null)
        {
            var item = ((DataRowView)obj).Row;
        }

Ps: 理論的には null になる可能性があるオブジェクトの明示的なキャストは常に避けています。

于 2013-03-06T12:53:19.273 に答える