0

ユーザーがクリックするたびに自分の行を選択する(強調表示する)チェックボックスのある列が必要です。私はこのコードを思いついたのですが、うまくいきません。どうすれば修正できますか?

これを行うためのより良い方法はありますか?(チェックボックスを「オフ」にした後も、行は蛍光ペンのままです)。

 private void dataGrid_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 0 && e.RowIndex != -1) 
            {
                if (Convert.ToBoolean(dataGrid.Rows[e.RowIndex].Cells[0].Value) == true)
                    dataGrid.Rows[e.RowIndex].Selected = false;
                else if (Convert.ToBoolean(dataGrid.Rows[e.RowIndex].Cells[0].Value) == false)
                    dataGrid.Rows[e.RowIndex].Selected = true;
            }
        }
4

2 に答える 2

1

チェックボックスの状態が更新される前にイベントが発生しているため、ロジックをCellMouseUpイベントハンドラーに配置してみてください。CellClick

これに加えて、EditedFormattedValueプロパティ(セルの現在のフォーマットされた値を含む)を使用して、CheckBoxesの現在の状態を取得します。

MSDNから:

Valueプロパティはセルに含まれる実際のデータオブジェクトですが、FormattedValueはこのオブジェクトのフォーマットされた表現です。

セルが編集モードであり、値がコミットされていないかどうかに関係なく、セルの現在のフォーマットされた値が格納されます。

これが実際の例です。

void dataGrid_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
    if (e.ColumnIndex == 0 && e.RowIndex != -1)
    {
        DataGridViewCheckBoxCell checkBoxCell =
            dataGrid.Rows[e.RowIndex].Cells[0] as DataGridViewCheckBoxCell;

        if (checkBoxCell != null)
        {
            dataGrid.Rows[e.RowIndex].Selected = Convert.ToBoolean(checkBoxCell.EditedFormattedValue);
        }
    }
}

お役に立てれば。

于 2011-10-20T22:34:13.257 に答える
0

CellMouseUpスペースプレスでの選択では機能しません。
「実際の」選択を行う必要がない場合は、セル値の変更時に行の背景色を変更します。これははるかに簡単です。

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 0 && e.RowIndex != -1)
    {
        if (Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells[0].Value) == true)
            dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Blue;
        else if (Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells[0].Value) == false)
            dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
    }
}
于 2011-10-20T22:44:10.140 に答える