4

DataGridViewCheckBoxCellsのバインドされていない列とともに、DataTableからデータをロードするDataGridViewがあります。DataGridViewの行は、ユーザーが保存した値を持つ別のDataTableと比較され、一致する場合は、その行のチェックボックスがオンになります。

値を比較し、チェックボックスの値を「true」に設定するコードは次のとおりです。

foreach (int j in selectedObjectives)
{
    foreach (DataGridViewRow r in dgvObjectives.Rows)
    {
        if (j == Convert.ToInt32(r.Cells["ObjectiveID"].Value))
        {
            dgvObjectives.CurrentCell = r.Cells["Select"];      
            ((DataGridViewCheckBoxCell)r.Cells["Select"]).Value = true;
            //dgvObjectives.InvalidateCell(r.Cells["Select"]);
            //dgvObjectives.EndEdit();
            //dgvObjectives.CommitEdit(DataGridViewDataErrorContexts.Commit);

        }
        if (Convert.ToInt32(r.Cells["ObjectiveID"].Value) == selectedIndex)
        {
            r.Selected = true;
        }
    }
}

フォームの読み込み中にこのアクションを実行するメソッドを呼び出すとprivate void WQMDrill_Load(object sender, EventArgs e)、値は正しく設定されていますが、チェックボックスがオンになりません。ただし、フォームの読み込みが完了した後に呼び出されると、コードは完全に機能します。残念ながら、ロードプロセス中にこれらをチェックする必要があります。

私は自分の問題を明確にしたことを願っています。この問題についての助けをいただければ幸いです。ご覧のとおり、私はセルだけでなく、DataGridViewコントロール全体を無効にしようとしました。私も持っています

private void dgvObjectives_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (this.dgvObjectives.CurrentCell.ColumnIndex == 0)
    {
        this.dgvObjectives.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}

この間、それは発火しません。ありがとうございました。

4

3 に答える 3

1

チェックボックスの選択と更新ロジックをDataBindingCompleteイベントハンドラーに配置できます。これは、FormLoadの後、ユーザーに何かが表示される前に発生します。

于 2011-06-30T17:31:26.990 に答える
0

呼び出しが実際にセルでCommitEdit発火するかどうかはわかりません。列がチェックボックス列の場合は、イベントをPaint処理して起動してみてください。CellMouseUpEndEdit

private void dgvObjectives_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
    if (dgvObjectives.Columns[e.ColumnIndex] is DataGridViewCheckBoxColumn)
    {
        dgvObjectives.EndEdit();
    }
}
于 2011-06-30T15:56:48.313 に答える
-1

私は同じ問題を抱えていて、それに対処するために多くの異なる方法を試しましたが、試したときを除いて、ほとんどが失敗しthis.BeginInvoke(new CDelegate())ました。

于 2012-02-15T08:26:33.990 に答える