Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   DataGridView с Checkbox (http://forum.oszone.net/showthread.php?t=188307)

LilLoco 14-10-2010 08:23 1518457

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

Код:

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

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

Delirium 14-10-2010 08:42 1518468

а в поиске пошукать? :) http://www.google.com/search?sourcei...&client=ie9-lb
и вот тут еще:

LilLoco 14-10-2010 09:51 1518503

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 1518590

Цитата:

Цитата 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;


LilLoco 14-10-2010 13:03 1518645

Цитата:

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

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

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

Учел, моя ошибка! Спасибо!

LilLoco 14-10-2010 15:49 1518822

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

Delirium 15-10-2010 01:21 1519188

Код:

row.DefaultCellStyle.BackColor = Color.FromArgb(argb);
где row = DataGridView1.Rows[row_num].

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

row.DefaultCellStyle.BackColor = Color.FromName("Red");


Время: 00:04.

Время: 00:04.
© OSzone.net 2001-