2016-08-29 4 views
0

私は、DataGridViewでDeleteItem機能を実装しようとしています。 私は次のイベントがあります。DataGridViewの行インデックスは常に同じ値を返します

private void btnDeleteDjelatnik_Click(object sender, EventArgs e) 
{ 
    int idDjelatnik = -1; 
    int index = djelatnikDataGrid.CurrentRow.Index; 
    Int32.TryParse(djelatnikDataGrid.Rows[index].Cells[0].Value.ToString(), out idDjelatnik); 
    r.DeleteDjelatnik(idDjelatnik); 
} 

私は私が私のDeleteメソッドに渡すことができるように選択された行ID列を取得しようとしている:DeleteDjelatnik(int型slectedID)。

次の行は、常に私の3の値を与える:

int index = djelatnikDataGrid.CurrentRow.Index; 

私も

int index = djelatnikDataGrid.SelectedRows[0].Index; 

を試してみましたが、私はArgumentOutOfRange例外を取得しています、はい、私のselectionModeがFullRowSelect

どう

でありますこれを機能させるには?

+0

try datagridview.CurrentCell.RowIndex –

+0

'CurrentRow'と' SelectedRow'は同じではないかもしれません。 'CurrentRow'はセルがアクティブである行を返します。 'SelectedRows'は選択を返します。したがって、' djelatnikDataGrid.SelectedRows [0] 'を使用する必要があります。 –

+0

私はすでにdatagridview.CurrentCell.RowIndexを試していましたが、私は何の行を選択しても値3を取得します。/ – ChenChi

答えて

0

本当の問題を支援します私のBindingNavigatorのDeleteItemプロパティでした!

"None"に設定する前に、 "btnDeleteDjelatnik_Click"を実行する前にDataGridViewからその行を削除し、インデックスを壊して削除したい行の実際のIDを取得できませんでした。

私の方法は、次のようになります。ヘルプ皆のため

private void btnDeleteDjelatnik_Click(object sender, EventArgs e) 
     { 
      int index = djelatnikDataGrid.SelectedRows[0].Index; 
      int idDjelatnik = -1; 
      Int32.TryParse(djelatnikDataGrid["IDDjelatnik", index].Value.ToString(), out idDjelatnik); 
      r.DeleteDjelatnik(idDjelatnik); 
      djelatnikDataGrid.Rows.RemoveAt(index); 
     } 

感謝を!

0

DataGridViewのIndexプロパティが正しい値を返さないので、私は、コードのこの作品を書いた:

public int djelatnikSelectedRowIndex { get; set; } 

private void djelatnikDataGrid_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    djelatnikSelectedRowIndex = e.RowIndex; 
} 
+0

Well..'SelectedRows [i] .Index'は決して私に失敗しませんでした。決して...:) – Pikoh

+0

それは私にxDの助けにならない、それは本当に奇妙なことが背景で起こっているように思われる – ChenChi

+0

なぜ私はこれが起こっているいくつかの追加情報を見つけたら – ChenChi

1

利用のDataGridViewのUserDeletingRowイベント、

private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e) 
     { 
      int deletingRowIndex = e.Row.Index; 
     } 

ホープ、

+0

ああスナップ、私はちょうど私がエラーを取得している理由を考え出したと思う... DataGridViewで私が削除しようとするアイテムはあらかじめ削除されます(私はBindingNavigatorを使用しています) -1、次にデータベースから削除するメソッドを呼び出すと、間違ったアイテム(インデックス-1のアイテム)が削除されます... – ChenChi

+0

アイテムが実際に削除される前に、このメソッドを使用してインデックスを取得します。混乱が始まったxD – ChenChi

+0

@ChenChi喜んで聞いたことがあります:) – Berkay

関連する問題