Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
Glevera
14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
1

Позволить выбрать только один Checkbox из многих

31.01.2013, 17:52. Просмотров 5360. Ответов 15
Метки нет (Все метки)

В DataGridView есть столбец с CheckBox'ами. Необходимо обеспечить выбор только одного из них, при выборе другого, необходимо снять выбор с предыдущего. Чувствую, что просто, но торможу. Подскажите, люди добрые.)
Ну и отследить выбранный чекбокс, чтобы при вызове методов передавать номер выделенной строки, например.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2013, 17:52
Ответы с готовыми решениями:

CheckedListBox, позволить выбирать только один элемент
Visual Studio 2012 Компонент: checkedListBox У него есть свойство: "SelectionMode". У него есть...

Как позволить ввод только цифр и запятых?
Знаю, что позволить ввод только цифр можно так: if (e.KeyChar != 8 && (e.KeyChar < 48 || e.KeyChar...

Как изменить состояние многих CheckBox на форме в один прием
Товарищи, наверное нубский вопрос, но если у меня есть 25 чекбоксов (0-24 соответственно), то как...

GlDrawElements рисует только один элемент из многих
Добрый день, есть такая задача -- необходимо отрисовать пару миллионов квадратов, и мне...

Выбрать из текста только те символы, которые встречаются в нем только один раз
Здравствуйте, помогите пожалуйста написать программу:) Условие. Дана строка, содержащая текст на...

15
kodv
1432 / 1105 / 344
Регистрация: 11.04.2011
Сообщений: 2,610
Завершенные тесты: 1
31.01.2013, 19:07 2
Glevera, описанное вами поведение характерно для RadioButton'ов. Почему вы не хотите использовать именно их?
0
Glevera
14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
01.02.2013, 11:55  [ТС] 3
kodv, у меня столбец типа DataGridViewCheckBoxColumn. Соответственно чекбокс.)
0
kodv
1432 / 1105 / 344
Регистрация: 11.04.2011
Сообщений: 2,610
Завершенные тесты: 1
01.02.2013, 12:15 4
Glevera, ааа ... Сорри, не внимательно читал. Тогда, видимо, прийдется при выделении одного чекбокса, остальные очищать в коде вручную )
0
01.02.2013, 12:15
Glevera
14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
01.02.2013, 12:17  [ТС] 5
kodv, а можно как-то отследить событие изменения ячейки одного конкретного столбца?
0
Eclipze
28 / 28 / 8
Регистрация: 28.01.2013
Сообщений: 211
01.02.2013, 15:51 6
как вариант, при установке флажка в CheckBox ячейку, проверять все остальные ячейки на установленный флажок, и если такие имеются, снимать его.
C#
1
2
3
4
5
for (int i = 0; i<DataGridView.Rows.Count;i++)
{
   if(DataGridView.Rows[i].Cell["Индекс столбца"].Value == true)
   DataGridView.Rows[i].Cell["Индекс столбца"].Value = false;
}
0
Glevera
14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
01.02.2013, 16:16  [ТС] 7
Eclipze, да это понятно же.
а можно как-то отследить событие изменения ячейки одного конкретного столбца?
0
jonni
110 / 110 / 25
Регистрация: 03.03.2010
Сообщений: 436
01.02.2013, 16:28 8
C#
1
2
3
4
if(e.ColumnIndex==0)
{
 // твой код
}
1
Glevera
14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
01.02.2013, 17:13  [ТС] 9
jonni, читайте, пожалуйста, вопросы, иначе не следует писать.
Дело в том, что, повторюсь, мне нужно отследить событие изменения значения конкретного столбца, который создается в коде. Т.е., автоматически, из панели "Свойства" DataGridView я не могу создать обработчик этого события, потому что на момент создания экземпляра формы, DataGridView вообще не содержит столбцов.
0
kesean
278 / 277 / 108
Регистрация: 04.09.2010
Сообщений: 638
Завершенные тесты: 1
01.02.2013, 17:23 10
Цитата Сообщение от Glevera Посмотреть сообщение
из панели "Свойства" DataGridView я не могу создать обработчик этого события
не верю Создайте событие CellValueChanged. Оно генерируется при изменении значения любой ячейки DGV, поэтому необходимо (в вашем случае) выставить условие обработки события, как показал jonni.
0
Glevera
14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
01.02.2013, 17:27  [ТС] 11
kesean, этот способ я знаю, но я же ищу самый, так сказать, прямой путь, потому немного нагрелся уже.)
Выходит, что нельзя по-другому, да?

Добавлено через 50 секунд
jonni, мои извинения. Как уже сказал, ждал чего-то другого.)
0
kesean
278 / 277 / 108
Регистрация: 04.09.2010
Сообщений: 638
Завершенные тесты: 1
01.02.2013, 17:28 12
По другому нельзя, по крайней мере средствами Net. А чем же не устраивает обработка стандартного события?
0
Glevera
14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
01.02.2013, 17:31  [ТС] 13
kesean, устраивает.) Когда учишься, лучше усваивать правильные способы решения маленьких задач, чтобы в будущем это на автомате делать. Так сказать, в каждой мелочи до истины докапываться.)
0
kesean
278 / 277 / 108
Регистрация: 04.09.2010
Сообщений: 638
Завершенные тесты: 1
01.02.2013, 17:32 14
Цитата Сообщение от Glevera Посмотреть сообщение
ждал чего-то другого
Тогда, вопрос должен был звучать по другому, например: "Есть ли возможность отследить изменение ячейки не обрабатывая CellValueChanged?"
0
Glevera
14 / 14 / 2
Регистрация: 29.04.2012
Сообщений: 148
01.02.2013, 17:38  [ТС] 15
kesean,
Цитата Сообщение от Glevera Посмотреть сообщение
а можно как-то отследить событие изменения ячейки одного конкретного столбца?
Вот, я указал. И не просто отследить изменение<...>, а именно событие.

Не по теме:

Вообще говоря, ведь есть еще и CellEndEdit и прочие события. Поэтому "Есть ли возможность отследить изменение ячейки не обрабатывая CellValueChanged?" тоже не совсем соответствует тому, что я хотел.

0
Spectral-Owl
587 / 563 / 157
Регистрация: 29.06.2010
Сообщений: 1,605
Завершенные тесты: 1
01.02.2013, 17:59 16
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if ((e.RowIndex != -1) && (e.ColumnIndex != -1))
            {
                if (dataGridView1.Columns[e.ColumnIndex] is DataGridViewCheckBoxColumn)
                {
                    dataGridView1.CellValueChanged -= dataGridView1_CellContentClick;
 
                    bool val = (bool)dataGridView1[e.ColumnIndex,e.ColumnIndex].Value;
                    for (int i = 0; i < dataGridView1.ColumnCount; i++)
                        dataGridView1[e.ColumnIndex,i].Value = false;
 
                    dataGridView1[e.ColumnIndex, e.RowIndex].Value = val;
 
                    dataGridView1.CellValueChanged += dataGridView1_CellContentClick;
                }
            }
        }
только один нюанс, ячейка, даже типа boolean, почему-то может иметь Value==null;
так что или в методе проверять на null, либо инициализировать <>.Value=new Boolean() при добавлении ячейки/строки.

Добавлено через 2 минуты
а хотя, может и не надо так мудрить с событиями клика. писал первоначально под событие CellValueChanged, там было необходимо, здесь же строки 8 и 16 не обязательны.
строку 16 после создания таблицы вставишь, и будет у тебя обработчик.

Добавлено через 13 минут
ещё раз извиняюсь, обработчик изменил, а обрабатываемое событие забыл. в идеале там должны быть:
C#
1
2
3
dataGridView1.CellContentClick -= dataGridView1_CellContentClick;
...
dataGridView1.CellContentClick += dataGridView1_CellContentClick;
но, как уже упоминалось, две эти строки в этом месте кода не обязательны, но вторая обязательна после создания таблицы.
1
01.02.2013, 17:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2013, 17:59

Выбрать из текста только те символы, которые встречаются в нем только один раз
Дан текст на русском языке. Выбрать из него только те символы, которые встречаются в нем только...

Выбрать из файла только те символы, которые встречаются в нем только один раз
дан текстовый файл, содержащий текст на русском языке. Выбрать из него только те символы, которые...

Выбрать и напечатать только те символы, которые встречаются в нем только один раз
Разработать алгоритм:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru