2016-10-04 6 views
0

特定のボタンを関数で使用してグリッドから特定のgridviewレコードを削除しようとしていますが、レコードを選択するたびに「NullReferenceExceptionが未処理のエラーでした」ようです除去された。 (レコードは、「編集」状態になっている。ボタンを使用してgridviewレコードを削除する#

Form Design Actual Error

これらのボタンは、私はGridViewのレコードの新しいセットを追加したときに、私が望むように、私はそれらを追加し、削除することが正常に動作し、エラーがポップアップ開始しました私はレコードを編集するとき、[削除]ボタン用

コード:

int nCurrentRow = -1; 
     nCurrentRow = Convert.ToInt16(grdWorkers.CurrentCell.RowIndex.ToString()); 
     if (nCurrentRow != -1) 
     { 
      DataRow dr; 
      dr = dsDetail1.Tables["Workers2"].Rows[nCurrentRow]; 
      dsDetail1.Tables["Workers2"].Rows.Remove(dr); 
     } 


     grdWorkers.DataSource = null; 
     grdWorkers.DataSource = dsDetail1.Tables["Workers2"]; 
     grdWorkers.Columns[0].Visible = false; 
+0

これを 'nCurrentRow = grdWorkers.CurrentCell.RowIndex;に変更すると、行インデックスはすでにintを返します。編集状態をクリックしたときに再度gridviewを塗りつぶしましたか?データが更新されるように更新する必要がありました –

+0

'dsDetail1.Tables'がエラーを出すと思います。私は正しい? – Berkay

+0

__ 'DataGridView'a' GridView'または 'DataGrid'を呼び出すことはありませんか?これらは異なるコントロールであるため、間違って混乱します。常に__right__の名前で物事を呼び出す! – TaW

答えて

0

を私はここで間違っているかもしれないが、あなたが取得しているように見えますDataGridまたはDatagridViewからのインデックス(私はどちらを使用したか分かりません。私はDataGridViewを使用しています)。あなたのコード:

これは、DataGridViewで選択したセルのインデックスを返します。次に、そのインデックスをDataTableで使用します。

DataRow dr; 
dr = dsDetail1.Tables["Workers2"].Rows[nCurrentRow]; 
dsDetail1.Tables["Workers2"].Rows.Remove(dr); 

DataGridViewに表示されるDataSourceがある場合、2つのインデックスは必ずしも同じではありません。以下は、DataGridViewで選択したアイテムのDataTableにインデックスを取得するために使用するものです。

DataRowView drv = (DataRowView)dataGridView1.CurrentRow.DataBoundItem; 
DataRow dr = drv.Row; 
int indexToTable = dgvDataTable.Table.Rows.IndexOf(dr); 

希望します。

関連する問題