Показать полную графическую версию : DataGridView с Checkbox
Здрасти) Собственно такой вопрос : Есть DataGridView(например, из 2х колонок, одна типа - текст, другая - чекбокс)!Таблица ни с чем не связана!Данные вносятся свободно, при помощи :
for (int j = 0; j < 20; j++)
{
DataGridView.Rows.Add(j.ToString(),false);
}
При выполнение, все заносится в таблицу!Но вот при нажатии на чекбокс, он не меняется!Что нужно сделать?Обрабатывать событие клика на ячейке?или можно как то по другому?Подскажите пожалуйста!
Delirium
14-10-2010, 08:42
а в поиске пошукать? :) http://www.google.com/search?sourceid=navclient&q=C%23+datagridview+checkbox&gfns=1&client=ie9-lb
и вот тут (http://stackoverflow.com/questions/1074378/c-datagridview-checkbox-checked-event-multiple-rows) еще:
Delirium, Да я искал, но чет так и не разобрался :(((
Смену чекбоксов сделал так :
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1[e.ColumnIndex, e.RowIndex].Value.GetType() == Type.GetType("System.Boolean"))
{
if ((bool)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == true)
{
dataGridView1[1, e.RowIndex].Value = false;
}
else
{
dataGridView1[1, e.RowIndex].Value = true;
}
}
}
является ли такой метод рациональным?или нужно что то другое?
Delirium
14-10-2010, 12:06
является ли такой метод рациональным? »
Ну можно и так, почему нет. Один нюанс - если включена возможность перестановки столбцов и переставить местами столбы, то вылетит исключение о несоответствии типов (true и string). Чтобы избежать такого, вместо dataGridView1[1, e.RowIndex] лучше писать dataGridView1["Имя столбца", e.RowIndex]
А, ну и если циклах (if, for. и т.д.) используется всего одна строка, то скобки фигурные не нужны. Т.о. твой код можно написать как:
if (dataGridView1[e.ColumnIndex, e.RowIndex].Value.GetType() == Type.GetType("System.Boolean"))
if ((bool)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == true)
dataGridView1[1, e.RowIndex].Value = false;
else
dataGridView1[1, e.RowIndex].Value = true;
А, ну и если циклах (if, for. и т.д.) используется всего одна строка, то скобки фигурные не нужны »
Это знаю :wink: но уже дело привычки :) Чтобы избежать такого, вместо dataGridView1[1, e.RowIndex] лучше писать dataGridView1["Имя столбца", e.RowIndex] »
Учел, моя ошибка! Спасибо!
Эм, дабы не создавать новой темы, напишу сюда же!
Сделал закрашивание строк, закрашивая в цикле отдельно каждую ячейку строки!Возможно ли как нибудь закрасить сразу целиком строку?Или все таки при помощи цикла?
Delirium
15-10-2010, 01:21
row.DefaultCellStyle.BackColor = Color.FromArgb(argb);где row = DataGridView1.Rows[row_num].
это если цвет(argb) задан как #2d3a1c, например. Если же стандартный цвет, то код такой:
row.DefaultCellStyle.BackColor = Color.FromName("Red");
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC