Лучший отвечающий
DataGridView событие для Checkbox

Вопрос
-
Есть датаГридВию, в нем есть колонка с типом CheckBox, какое событие отвечает когда происходит изменения значения(есть галка, нет галки)?
гуглил, но находил примеры которые только костылями и назовешь, неужели нет, что то проще в стиле C#?
- Изменено Magals 12 февраля 2013 г. 8:12
12 февраля 2013 г. 8:12
Ответы
-
Перехватите событие CellValuechanged в качестве аргумента туда передается экземпляр DataGridViewCellEventArgs
private void DataGridView1_CellValueChanged( object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == colnum) { var row = dataGridView1 .Rows[e.RowIndex]; if ((bool)row.Cells[e.ColumnIndex]) { //add to array } else { remove from array } } } }
columnum индекс вашей колонки в которой стоит чекбокс
- Помечено в качестве ответа Magals 12 февраля 2013 г. 11:22
12 февраля 2013 г. 10:40 -
((DataGridViewCheckBoxCell)row.Cells[e.columnIndex]).Value
12 февраля 2013 г. 10:51
Все ответы
-
Поймать клик на контроле можно при помощь CellContentClick, если ва мнужно само значение то это надо смотреть в коллекции записей12 февраля 2013 г. 8:26
-
Почему бы вам просто не посмотреть в сторону события CurrentCellDirtyStateChanged мне кажется оно вам полностью подойдет.12 февраля 2013 г. 8:30
-
Поймать клик на контроле можно при помощь CellContentClick, если ва мнужно само значение то это надо смотреть в коллекции записей
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value.ToString() != "true") { dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value = true; Text = "true"; } else { dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value = false; Text = "false"; } }
попытался написать свой обработчик, но всегда выполняется условия проверки. где я ошибся?12 февраля 2013 г. 8:51 -
Это событие вызывается когда вы кликаете на ячейке, и значение в этот момент еще не измененно, если вам нужно что бы обрабатывался только клик на нужной колонке, то проверяйте что ColumnIndex == вашей колонке, сейчас вы проверяете при клике на любой колонке, а если вам нужно уже новое значение то ловите событие CellValueChanges.CellValueChanged event to respond to it." id="mt69">
12 февраля 2013 г. 9:01 -
Это событие вызывается когда вы кликаете на ячейке, и значение в этот момент еще не измененно, если вам нужно что бы обрабатывался только клик на нужной колонке, то проверяйте что ColumnIndex == вашей колонке, сейчас вы проверяете при клике на любой колонке, а если вам нужно уже новое значение то ловите событие CellValueChanges.CellValueChanged event to respond to it." id="mt69">
Нужно не сам клик обрабатывать, а узнать в какое состояние перешло свойство ЧекБокса. то есть если сравнивать с обычным ЧекБоксом, то необходимо событиеprivate void checkBox1_CheckedChanged(object sender, EventArgs e) { }
со свойством Checked;
Если говорить о конечной цели, то вот что имею сейчас:
когда должен нажать на ЧекБокс, то в динамический массив я добавляю данные со всей строки, когда снимаю галку, я удаляю из массива данные этой строки
12 февраля 2013 г. 10:30 -
Перехватите событие CellValuechanged в качестве аргумента туда передается экземпляр DataGridViewCellEventArgs
private void DataGridView1_CellValueChanged( object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == colnum) { var row = dataGridView1 .Rows[e.RowIndex]; if ((bool)row.Cells[e.ColumnIndex]) { //add to array } else { remove from array } } } }
columnum индекс вашей колонки в которой стоит чекбокс
- Помечено в качестве ответа Magals 12 февраля 2013 г. 11:22
12 февраля 2013 г. 10:40 -
Перехватите событие CellValuechanged в качестве аргумента туда передается экземпляр DataGridViewCellEventArgs
private void DataGridView1_CellValueChanged( object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == colnum) { var row = dataGridView1 .Rows[e.RowIndex]; if ((bool)row.Cells[e.ColumnIndex]) { //add to array } else { remove from array } } } }
columnum индекс вашей колонки в которой стоит чекбокс
12 февраля 2013 г. 10:48 -
((DataGridViewCheckBoxCell)row.Cells[e.columnIndex]).Value
12 февраля 2013 г. 10:51 -
((DataGridViewCheckBoxCell)row.Cells[e.columnIndex]).Value
благодарю почти получилось. смущает только одно, событие происходит когда переключаюсь на другую колонку. то есть по сути, если человек выставить очередь нужных ему текст боксов, и закроет форму, то строка последнего чекбокса не попадет в массив
хотя нет, всё идет нормально12 февраля 2013 г. 11:21 -
Просто сделай событие на закрытие формы, только так получилось побороть...
privatevoidFrmBase_FormClosing(objectsender, FormClosingEventArgse)
{
dgvQuest[1,0].Selected = true;
}
3 марта 2016 г. 3:12 -
Как перехватить событие изменения этого Value интерактивно, не программно а по щелчку. Визуально состояние (крыж) меняется, но Click происходит до этого. А после этого нашел только CellEndEdit, но как сказано "смущает только одно, событие происходит когда переключаюсь на другую колонку". Нет способа поймать сам момент изменения состояния по щелчку?
- Изменено ashaxm 5 апреля 2017 г. 12:22
5 апреля 2017 г. 11:16 -
О, нашел такой способ:
включил в Sub MailDataGridView_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles MailDataGridView.CellClick
принудительную установку/снятие крыжа и сразу зависящие от этого действия там же.
5 апреля 2017 г. 15:56