1

データテーブルからデータ行を削除するWindowsアプリケーションがあります。しかし、私は例外を得ました。

指定されたDataRowは現在のDataRowCollectionにありません。

コード:

DataTable dt = new DataTable();
DataRowView currentDataRowView = (DataRowView)DataGridView1.CurrentRow.DataBoundItem;
DataRow row = currentDataRowView.Row;

dt.Rows.Remove(row); // exception here.
DataGridView1.DataSource = dt;

示されている画像としてのデータテーブルdtの情報。 datatable dt

私はすでにdatarowviewをdatarowにキャストしていると思います。

編集: dtは別のDataGridViewから作成されました。

                foreach (DataGridViewRow row in DatGridView2.Rows)
                {
                    DataGridViewCheckBoxCell check = row.Cells[0] as DataGridViewCheckBoxCell;
                    if (check.Value != null)
                    {
                        if ((bool)check.Value)
                        {
                            //this row has a checkBox set to true (tick is added)
                            //add this row to dataTable ...
                            DataRow myRow = (row.DataBoundItem as DataRowView).Row;
                            DataRow dr = dt.NewRow();
                            dr[0] = myRow[0];
                            dr[1] = myRow[1];
                            dr[2] = myRow[2];
                            dr[3] = myRow[3];
                            if (!dt.Rows.Contains(dr[0]))
                            {
                                dt.Rows.Add(dr);
                            }
                        }
                    }
4

2 に答える 2

3

由来するものとは異なる DataTable を参照することはできないと思いますCurrentRow.DataBoundItem

あなたのdtDataTable は DataGridView2 から構築されていますが、DataGridView1CurrentRow.DataBoundItemから来ています。

削除する前に、DataGridView1 で一致する行を自分で見つける必要があります。

于 2012-05-23T12:54:35.373 に答える
2

私はあなたのコードを試しましたが、問題なく動作しています:

        DataTable dt = (DataTable)dataGridView1.DataSource;
        DataRowView currentDataRowView = (DataRowView)dataGridView1.Rows[0].DataBoundItem;
        DataRow row = currentDataRowView.Row;

        dt.Rows.Remove(row); 
        dataGridView1.DataSource = dt;

上で書いたように、「指定された DataRow は現在の DataRowCollection にありません」というエラーは、DataTable "dt" にない行を削除しようとしていることを意味します。

于 2012-05-23T13:17:40.547 に答える