2012-07-02 67 views
6

私はDataGridViewです。いくつかのセルでは、いくつかのデータを追加します。現在編集しているセルが空で、残そうとしている場合は、メッセージ「bla-bla-bla」がユーザーに表示され、編集モードのセルにはフォーカスが戻されます。C#でCellEnter/CellLeaveイベントをキャンセルする方法は?

これは私がCellEnterCellLeaveCellEndEditなどを使用しているため、セルに入力された値をチェックした後にキャンセルしたいと考えています。しかし、Im noobとそれは動作しません。私を助けてください。アドバイスを見てうれしいです。

ここに私のコードの変形があります。私は他のイベントで試しましたが、それは非常にナイーブです。

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    if (dataGridView1[e.ColumnIndex, e.RowIndex] == null) 
    { 
     MessageBox.Show("Empty cell!"); 

     dataGridView1.CurrentCell = dataGridView1[e.ColumnIndex, e.RowIndex]; 
    } 
} 
+0

あなたのコードを表示すると、ヘルプはそれに基づいています。 – HichemSeeSharp

+0

@cppanda>これはコードで解決する必要がありますか?はい – stepler

+0

あなたが望むのは、ユーザーが編集モードを放棄しないようにすることです。入力された値は「許容値」ではありませんか? –

答えて

6

DataGridViewCellValidatingイベントに基づいて解決策を探す必要があります。

DataGridViewが編集モードを終了する直前に発生し、ユーザーが入力した値を受け入れないようにすることができます。入力された値を拒否するには、イベントハンドラのコードでe.CancelTrueに設定する必要があります。

private void dataGridView1_CellValidating(object sender, 
    DataGridViewCellValidatingEventArgs e) 
{ 

    if (!IsValueValid(e.FormattedValue)) 
    { 
     e.Cancel = true; 

     MessageBox.Show("Not Valid!"); 
    } 
} 

ウェブでの多くの例がありますが、一つはMSDNDataGridViewCellValidatingEventArgsのドキュメントに直接見つけることができます。 方法IsValueValid(Object o)は単なる命名例であり、あなたのコードでそれを宣言し、検証のために体を提供する必要があり、DataGridViewコンポーネントの一部ではないという性質DataGridViewCellValidatingEventArgs.FormattedValue

ノートのドキュメントにも見てみましょう。

+1

ちょうど今試みました。私が望むように働く。ありがとうございました! – stepler

0

あなたはは、特定の細胞または行のデータグリッドCellEnter CellLeaveイベントを無効にすることはできません。

あなたができることは、空である/入力/退出イベントが呼び出されるべきではないセルの一覧を保存することです。また、CellEnter/CellLeaveで項目を実行する前に、無効なセル。

+1

私はそれについて考えるでしょう。ありがとうございました。 – stepler

関連する問題