Выбор столбца флажка Datagrid не работает правильно - PullRequest
0 голосов
/ 21 октября 2011

Я хочу иметь столбец с флажками, чтобы, когда пользователь щелкает по ним, он выбирал собственную строку (выделите ее). Я пришел с этим кодом, с не выполняет работу, как я могу это исправить?

Есть ли лучший способ сделать это? (Строка остается выделенной даже после того, как я снял флажок).

 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;
            }
        }

Ответы [ 2 ]

1 голос
/ 21 октября 2011

Попробуйте поместить логику в обработчик событий CellMouseUp, поскольку событие CellClick происходит до обновления состояния CheckBox.

Это вместе с использованием свойства 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);
        }
    }
}

Надеюсь, это поможет.

0 голосов
/ 21 октября 2011

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...