Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.07.2020
Сообщений: 98
1

CHeckbox в DataGridView

14.03.2023, 18:06. Показов 558. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем Здравствуйте!
Кто знает или сталкивался, помогите)
Я добавил в Datagridview - Checkbox
На форме создал кнопку (Удалить запись)
Как сделать что бы пользователь нажал на checkbox (галочку) и строка выделилась и удалила его через кнопку
Вот скриншот -
CHeckbox в DataGridView

Вот код, нашёл на каком то сайте, проделал всё как там описали и ничего не происходит ^-^
Событие клика в "dgv" -
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var checkBox = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewCheckBoxCell;
            var isCheck = checkBox?.Value;
            var check = isCheck == null ? false : bool.Parse(isCheck.ToString());
 
            if (isCheck != null)
                checkBox.Value = !check;        // change checkbox value
 
            if (e.ColumnIndex == 3 && check)
            {
                DialogResult dialogResult = MessageBox.Show("Are you Sure",
                    "Delete Row", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes)
                {
                    dgv.Rows.RemoveAt(e.RowIndex);
                }
            }
Кнопка "Удалить запись" -
C#
1
 dgv_CellContentClick(null, new DataGridViewCellEventArgs(2, 0));
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.03.2023, 18:06
Ответы с готовыми решениями:

dataGridView + checkBox
добрый день! подскажите, как мне в таблицу dataGridView, заполняемую динамически, добавить checkBox...

CheckBox в DataGridView
Привет всем. Есть некоторый вопрос: Есть DataGridView, в нем есть один столбец типом данных -...

Checkbox в DataGridView
Добрый день В DataGridView имеется колонка DataGridViewComboBoxColumn. Задача: По специальной...

DataGridView с CheckBox
Есть Datatable c типом: DataColumn("Check", typeof (bool)); Хочу когда выбиралось поле, у...

8
0 / 0 / 0
Регистрация: 08.07.2020
Сообщений: 98
14.03.2023, 18:23  [ТС] 2
Забыл добавить ещё код -
Добавление в Datagridview - Checkbox
C#
1
dgv.Columns.Add(new DataGridViewCheckBoxColumn { Name = "Удалить" });
0
2098 / 1508 / 391
Регистрация: 26.06.2017
Сообщений: 4,318
14.03.2023, 19:52 3
Цитата Сообщение от Dmitriy02 Посмотреть сообщение
Я добавил в Datagridview - Checkbox
Модель данных, как рекомендовалось в прошлой теме, в проекте есть?
0
0 / 0 / 0
Регистрация: 08.07.2020
Сообщений: 98
14.03.2023, 20:05  [ТС] 4
Есть
0
2098 / 1508 / 391
Регистрация: 26.06.2017
Сообщений: 4,318
14.03.2023, 23:14 5
Dmitriy02, покажите код модели, код создания набора экземпляров модели.
0
0 / 0 / 0
Регистрация: 08.07.2020
Сообщений: 98
15.03.2023, 05:57  [ТС] 6
Кнопка "Добавить"
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 private void button4_Click(object sender, EventArgs e)
        {
            //Добавляем элемент в список
            Data.Add(new ItemRow()
            {
                ID = int.Parse(textbox7.Text),
                Name = textbox1.Text,
                Model = comboBox1.Text,
                Count = int.Parse(textbox3.Text),
                Replacement = comboBox2.Text,
                Material = textBox2.Text,
                DateStart = DateTime.Parse(beginDate.Value.ToShortDateString()),
                DateEnd = DateTime.Parse(endDate.Value.ToShortDateString())
            });
        }
DB
C#
1
2
3
4
if (File.Exists("DataBase.xml"))
                Data = XMLFile.Load<BindingList<ItemRow>>("DataBase.xml");
 
            dgv.DataSource = Data;
Class ItemRow
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class ItemRow
    {
 
        [DisplayName("Номер")]
        public int ID { get; set; }
 
        [DisplayName("Компания")]
        public string Name { get; set; }
 
        [DisplayName("Модель картриджа")]
        public string Model { get; set; }
 
        [DisplayName("Количество картриджей")]
        public int Count { get; set; }
 
        [DisplayName("Замена материалов")]
        public string Replacement { get; set; }
 
        [DisplayName("Количество материалов")]
        public string Material { get; set; }
 
        [DisplayName("Дата начала")]
        public DateTime DateStart { get; set; }
 
        [DisplayName("Дата окончания")]
        public DateTime DateEnd { get; set; }
 
        public string Selected { get; set; }
 
        public string Spe******t { get; set; }
    }
 
    public class ItemCombo
    {
        public string Value { get; set; }
 
    }
Добавлено через 2 минуты
Самого кода на модуля нету у меня на экземпляре
0
2098 / 1508 / 391
Регистрация: 26.06.2017
Сообщений: 4,318
15.03.2023, 10:42 7
Лучший ответ Сообщение было отмечено Dmitriy02 как решение

Решение

При таком раскладе вижу несколько вариантов.
1. Добавить в класс модели свойство State, которое будет аналогом свойства DataRow.RowState. Но тогда необходимо иметь два набора данных, один для отображения другой для непосредственной обработки. Или делать аналог класса DataView.
2. Добавить в проект класс наследующий модель, но расширяющий её свойством Deleted (или State). Следовательно везде работать с классом наследником для возможности обработки свойства Deleted (State).
3. В обработчике клика по кнопке "Удалить" просто пройтись по строкам сетки и удалять из неё строки для которых установлен флажок. Но это костыль, который может привести к плачевным результатам.

Добавлено через 1 час 6 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class ItemRow
    {
        [DisplayName("Номер")]
        public int ID { get; set; }
 
        [DisplayName("Компания")]
        public string Name { get; set; }
 
        [DisplayName("Модель картриджа")]
        public string Model { get; set; }
 
        [DisplayName("Количество картриджей")]
        public int Count { get; set; }
 
        [DisplayName("Замена материалов")]
        public string Replacement { get; set; }
 
        [DisplayName("Количество материалов")]
        public string Material { get; set; }
 
        [DisplayName("Дата начала")]
        public DateTime DateStart { get; set; }
 
        [DisplayName("Дата окончания")]
        public DateTime DateEnd { get; set; }
 
        public string Selected { get; set; }
 
        public bool MarkedForDeletion { get; set; }
 
        public string Spe******t { get; set; }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
private void DeleteButton_Click(object sender, EventArgs e)
{
  //Удаляем все отмеченные элементы списка
  for (int i = Data.Count - 1; i >= 0; i--)
  {
    ItemRow currentItem = Data[i];    
    if (currentItem.MarkedForDeletion)
    {
       Data.Remove(currentItem);
    }
  }
}
1
0 / 0 / 0
Регистрация: 08.07.2020
Сообщений: 98
15.03.2023, 17:26  [ТС] 8
Спасибо, работает
После того как Вы в классе добавили "MarkedForDeletion" у меня в таблице его имя, а если я дополню вот этот код -
C#
1
[DisplayName("Удалить")]
То он жалуется на "}"
Пытаюсь добавить "MarkedForDeletion" в Форму 1 и изменить имя и перенести его после Статуса
Вот скриншот -
А вот код куда я хочу добавить "MarkedForDeletion" и изменить его имя и перенести
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private void Form1_Load(object sender, EventArgs e)
        {
            if (File.Exists("DataBase.xml"))
                Data = XMLFile.Load<BindingList<ItemRow>>("DataBase.xml");
 
            dgv.DataSource = Data;
 
 
            DataGridViewColumn kol7 = new DataGridViewColumn(); //объявить столбец
            DataGridViewComboBoxCell cell_CB7 = new DataGridViewComboBoxCell(); //создание ячейки, тип ComboBox
 
            
            kol7.HeaderText = "Статус";
            kol7.Name = "column6";
            kol7.Width = 150;
 
  
            cell_CB7.DataSource = new string[] { "В ожидании", "Готово", "Не готово" };
            kol7.DataPropertyName = "Selected";
 
 
            kol7.CellTemplate = cell_CB7;  // задаем шаблон
 
 
            dgv.Columns.Add(kol7);
            dgv.Columns["Selected"].Visible = false;
 
            
        }
Миниатюры
CHeckbox в DataGridView  
0
1480 / 935 / 454
Регистрация: 06.02.2012
Сообщений: 2,862
15.03.2023, 17:42 9
Лучший ответ Сообщение было отмечено Dmitriy02 как решение

Решение

Dmitriy02, Укажи индекс колонки куда нужно переместить
C#
1
 dgv.Columns["MarkedForDeletion"].DisplayIndex =9;
0
15.03.2023, 17:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2023, 17:42
Помогаю со студенческими работами здесь

checkbox в заголовке datagridview
Салют еще раз. Имею datagridview в header которого тыркаю checkbox, он вставляется но в левый...

Связать CheckBox с DataGridView
Всем здравствуйте! Есть dataGridView уже связанный с сервером SQL и ниже есть куча СheckBox'ов...

DataGridView: CheckBox столбец
В DataGridView данные у меня считываются через DataSource = List&lt;MyClass&gt; с включенным...

DataGridView и CheckBox в ее ячейках
Имеется следующий код: string strSQL; string strConn; strSQL = &quot;SELECT One, Two, Three, Four,...

Работа с checkbox в datagridview
Здравствуйте! Столкнулся с такой проблемой. Имеется TreeView, по нажатию на ветку которого...

CheckBox & DataGridView
Добрый день. Подскажите, пожалуйста. Не получается реализовать CheckBox &amp; DataGridView. Таблица...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru