2010-11-29 17 views
2

DataGridViewから行を削除しようとしています。基本的に、最初の列はコンボボックスであり、ユーザーがコンボボックスから「[Remove]」を選択すると、行全体が削除されます。だから私はこのOnCellEndEditイベントコードを持っている:それはSetCurrentCellAddressCore関数への再入可能呼び出しにつながるのでDataGridViewから行を削除できない

操作は有効ではありません。

if (grid.CurrentCell.ColumnIndex == 0 && grid.CurrentRow.Cells[0].Value.ToString()=="[Remove]") { 
    grid.EndEdit(); 
    grid.Rows.RemoveAt(grid.CurrentRow.Index); 
} 

よりもむしろ行を削除、これは例外をスローします。

私は削除する前に、私はこのように、別の列にcurrentRowの移動しようとしました:

DataGridViewRow deleteRow = grid.CurrentRow; 
grid.CurrentRow.Selected = false; 
grid.Rows[deleteRow+1].Selected = true; 
grid.Rows.RemoveAt(deleteRow); 

同じ問題。グリッドのAllowUserToDeleteRows属性はtrueです。私はこのコントロールにデータをバインドしていません。

ボタンコントロールのOnClickイベントから行を削除するかのように、問題がCellEndEditイベントに結びついていると思います。大丈夫です。

プログラムでボタンのOnClickイベントをトリガーできますか?どうやって?

答えて

1

あなたは既にOnCellEndEditコールにいるようですので、grid.EndEdit()に再度電話する必要はないと思います。その呼び出しを削除して、行が削除されるかどうか確認してください。無限ループに終わる可能性があるので、エラーが発生したと私は信じています。

+0

それでも、私はエラーを回避する無駄な試みでEndEdit()を追加しました。 –

+1

CellValueChangedイベントの行を削除しようとする可能性があります。http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellvaluechanged.aspx編集でグリッドの編集が不安ですイベントは良いアイデアです。 – SwDevMan81

+1

CellValueChangedに移動しました。問題は解決しました。ありがとうございます。 –

0

あなたの編集を適用する前に次のチェックを使用します。

public void myGrid_EndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    if (!myGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected) 
       return; 
    //...rest of your code to apply edit below... 
} 

これは、編集中の任意のセルで動作するはずです(フォーカスを失ったときに、編集コードが適用されない。タイピング入力、編集を適用するには十分であろう)

関連する問題