2

私は、DataGridViewその列のどれが DataGridViewCheckBoxColumn であるかを持っています。この列のセルをチェックすると、同じ行 (ただし異なる列) の他の 2 つのセルが であるかどうかを検証します0。両方が0の場合、チェックボックス列に入力された新しい値をキャンセルしたい (イベントを消費し、その変更を無視する)。つまり、それをチェックし、他の2つの列が両方とも0(同じ行にある)場合、チェックボックスセルのチェックを外したままにします。

CellValidatingイベントを処理することでこれを行います。その中で、これらの2つのセル(同じ行)が両方0であるかどうかを確認し、ユーザーがチェックボックスセル(同じ行)をe.Cancel = trueチェックした場合、チェックボックスセルをオフのままにし、チェックを無視するために行いますユーザーによって。

しかし、それは機能していませんe.RowIndexCellValidatingイベントがクリックしたばかりの行インデックスに対応していませんが、e.ColumnIndex正しいことがわかりました...

要約すると、ユーザーが行のチェックボックス列をチェックするときに、他の2つの列の値が両方とも0同じ行に設定されている場合、チェックボックス列を変更せずに保持したいということです(古い値のままです。たとえば、チェックされていないときにユーザーがチェックした場合、チェックされないままになります)。それ以外の場合、これら 2 つの列が両方とも に設定されていない場合0、チェックボックスの列が考慮されます。

何か案は?

4

1 に答える 1

5

とは別のイベントを使用しますCellValidating。私は使うだろうCellBeginEdit

dataGridView1.CellBeginEdit += CellBeginEdit;

private void CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;      
    if (dgv[0, e.RowIndex].Value == "2") # or whatever conditions you want to check
    {
        e.Cancel = true;
    }
    else
    {
        e.Cancel = false;
    }
}

以前に使用していたセルで呼び出されると思いCellValidatingます。そのため、行インデックスは意味がありません。

于 2012-08-09T21:26:50.093 に答える