.NET - DataGridView с Checkbox

Ответить
Аватара пользователя
LilLoco

.NET - DataGridView с Checkbox

Сообщение LilLoco »

Здрасти) Собственно такой вопрос : Есть DataGridView(например, из 2х колонок, одна типа - текст, другая - чекбокс)!Таблица ни с чем не связана!Данные вносятся свободно, при помощи :





Код:

Код: Выделить всё

for (int j = 0; j < 20; j++)
{
       DataGridView.Rows.Add(j.ToString(),false);
}

При выполнение, все заносится в таблицу!Но вот при нажатии на чекбокс, он не меняется!Что нужно сделать?Обрабатывать событие клика на ячейке?или можно как то по другому?Подскажите пожалуйста!
Аватара пользователя
LilLoco

Re: .NET - DataGridView с Checkbox

Сообщение LilLoco »

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

Re: .NET - DataGridView с Checkbox

Сообщение Delirium »

Цитата LilLoco:



является ли такой метод рациональным?
.NET - DataGridView с Checkbox




Ну можно и так, почему нет. Один нюанс - если включена возможность перестановки столбцов и переставить местами столбы, то вылетит исключение о несоответствии типов (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;
Аватара пользователя
LilLoco

Re: .NET - DataGridView с Checkbox

Сообщение LilLoco »

Цитата Delirium:



А, ну и если циклах (if, for. и т.д.) используется всего одна строка, то скобки фигурные не нужны
.NET - DataGridView с Checkbox




Это знаю Изображение но уже дело привычки Изображение
Цитата Delirium:



Чтобы избежать такого, вместо dataGridView1[1, e.RowIndex] лучше писать dataGridView1["Имя столбца", e.RowIndex]
.NET - DataGridView с Checkbox




Учел, моя ошибка! Спасибо!
Аватара пользователя
LilLoco

Re: .NET - DataGridView с Checkbox

Сообщение LilLoco »

Эм, дабы не создавать новой темы, напишу сюда же!

Сделал закрашивание строк, закрашивая в цикле отдельно каждую ячейку строки!Возможно ли как нибудь закрасить сразу целиком строку?Или все таки при помощи цикла?
Аватара пользователя
Delirium

Re: .NET - DataGridView с Checkbox

Сообщение Delirium »

Код:

Код: Выделить всё

row.DefaultCellStyle.BackColor = Color.FromArgb(argb);

где row = DataGridView1.Rows[row_num].



это если цвет(argb) задан как #2d3a1c, например. Если же стандартный цвет, то код такой:



Код:

Код: Выделить всё

row.DefaultCellStyle.BackColor = Color.FromName("Red");
Ответить

Вернуться в «Программирование и базы данных»