Программно снимите флажок столбца в datagridview

Как я могу программно снять отметку со всех строк в DataGridViewCheckboxColumn в datagridview?

Я могу получить правильное значение флажка, используя

(bool)row.Cells[CheckBoxColumn.Index].FormattedValue

но это только геттер.

Я попытался установить значение ячейки, используя

(bool)row.Cells[CheckBoxColumn.Index].value = false

но это не влияет на FormattedValue.

Как я могу это решить?


person Awesome    schedule 18.01.2011    source источник


Ответы (7)


Вы делаете что-л. как:

(row.Cells[CheckBoxColumn.Index] as DataGridViewCheckBoxCell).value = false;

Вы просто забыли привести к правильному типу, универсальный DataGridViewCell не знает своего типа значения.

person basti    schedule 18.01.2011
comment
Это работает. Ваш код не влияет на FormattedValue, который я использую для получения значения флажка. Мы можем решить проблему и обвинить FormattedValue. Видите ли, когда я пытаюсь получить логическое значение из (row.Cells[CheckBoxColumn.Index] as DataGridViewCheckBoxCell).value, приложение аварийно завершает работу. Это заставило меня придерживаться FormattedValue. - person Awesome; 18.01.2011
comment
Я действительно использовал это, чтобы установить значение true, но это не сработало. - person John Demetriou; 24.11.2016

Вы пытались перевести первый элемент управления в столбце флажка в флажок, а затем установить для параметра «Проверено» значение true?

Попробуйте что-нибудь в этом роде.

((DataGridViewCheckBoxCell)e.Rows[0].Cells[0]).Selected = true
person Josh    schedule 18.01.2011
comment
Возможно фрагмент кода? И что вы подразумеваете под первым контролем? Ряд, ячейка...? - person Awesome; 18.01.2011
comment
В datagridviewrow нет .Controls[]. - person Awesome; 18.01.2011

Не проверял, но вы можете попробовать;

CheckBox cb = (row.Cells[CheckBoxColumn.Index].Controls[0] as CheckBox);
if(cb != null)
{
    cb.Checked = false;
}

Его тип может быть разным. Просто отладьте и приведите его к тому, что есть.

person Pabuc    schedule 18.01.2011
comment
Datagridviewcell не имеет .Controls[] - person Awesome; 18.01.2011

Если вы используете dataGridView1_ContextClick только для «ложного» столбца datagidviewCheckBox, вам нужен этот код:

dataGridView1.CancelEdit();

но если вам нужны все строки CheckBoxColumns DataGrid:

private void button1_Click(object sender, EventArgs e)
{
    foreach (DataGridViewRow r in dataGridView1.Rows)
    {
        r.Cells["statusBox"].Value = true;
    }
}
person mehdi sobhkhiz talooki    schedule 05.03.2016

В зависимости от того, что вы хотите сделать

Если речь идет о выбранной строке, вы можете:

DataGridViewRow row = dataGridViewName.CurrentRow;

//This will assign the opposite value of the Cell Content
row.Cells["ColumnName"].Value = !Convert.ToBoolean(row.Cells["ColumnName"].Value);

Однако, если вы хотите сделать это для всей таблицы DataGridView, тогда:

    foreach (DataGridViewRow row in dataGridViewName.Rows)

   {
        //This will assign the opposite value of the Cell Content
        row.Cells["ColumnName"].Value = !Convert.ToBoolean(row.Cells["ColumnName"].Value);
   }

Все, что вам подходит. Так держать!

person Tsiriniaina Rakotonirina    schedule 19.03.2021

Прокрутите каждую строку представления сетки и используйте метод управления поиском:

foreach ( GridViewRow row in myGridView )
{
     CheckBox checkBox = ( CheckBox ) row.FindControl( "myCheckBox" );
     checkbox.Checked = false;
}
person Miyagi Coder    schedule 18.01.2011
comment
Возможно, FindControl — это просто что-то для Интернета? Я разрабатываю приложение WinForms. - person Awesome; 18.01.2011

person    schedule
comment
Пожалуйста, всегда переводите свой код (или, по крайней мере, комментарии) на английский язык, когда публикуете что-либо здесь. - person sjngm; 17.01.2012