DataGridView с Checkbox
Здрасти) Собственно такой вопрос : Есть DataGridView(например, из 2х колонок, одна типа - текст, другая - чекбокс)!Таблица ни с чем не связана!Данные вносятся свободно, при помощи :
Код:
for (int j = 0; j < 20; j++)
{
DataGridView.Rows.Add(j.ToString(),false);
}
При выполнение, все заносится в таблицу!Но вот при нажатии на чекбокс, он не меняется!Что нужно сделать?Обрабатывать событие клика на ячейке?или можно как то по другому?Подскажите пожалуйста!
|
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;
}
}
}
является ли такой метод рациональным?или нужно что то другое?
|
Цитата:
Цитата LilLoco
является ли такой метод рациональным? »
|
Ну можно и так, почему нет. Один нюанс - если включена возможность перестановки столбцов и переставить местами столбы, то вылетит исключение о несоответствии типов (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;
|
Цитата:
Цитата Delirium
А, ну и если циклах (if, for. и т.д.) используется всего одна строка, то скобки фигурные не нужны »
|
Это знаю :wink: но уже дело привычки :)
Цитата:
Цитата Delirium
Чтобы избежать такого, вместо dataGridView1[1, e.RowIndex] лучше писать dataGridView1["Имя столбца", e.RowIndex] »
|
Учел, моя ошибка! Спасибо!
|
Эм, дабы не создавать новой темы, напишу сюда же!
Сделал закрашивание строк, закрашивая в цикле отдельно каждую ячейку строки!Возможно ли как нибудь закрасить сразу целиком строку?Или все таки при помощи цикла?
|
Код:
row.DefaultCellStyle.BackColor = Color.FromArgb(argb);
где row = DataGridView1.Rows[row_num].
это если цвет(argb) задан как #2d3a1c, например. Если же стандартный цвет, то код такой:
Код:
row.DefaultCellStyle.BackColor = Color.FromName("Red");
|
Время: 00:04.
© OSzone.net 2001-