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

Удаление элемента из DataGridView через TextBox

24.06.2022, 21:33. Показов 743. Ответов 1

Author24 — интернет-сервис помощи студентам
Мне нужно удалить строку из DataGridView в одной форме при совпадении числа из первого столбца DataGridView с числом в TextBox'е в другой форме и при нажатии на кнопку. Пока без понятия, как передавать значение элемента из DataGridView в другую форму, чтобы проверить на совпадение, и также не знаю, как реализовать удаление строки.

Код основной формы:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
namespace KURSOVAYA
{
    public partial class Form1 : Form
    {
        // создаём структуру, которую мы будем записывать.
        public struct book
        {
            public double number;
            public string avtor;
            public string name;
            public int year;
            public int instock;
 
            // создаём конструктор, при помощи которого будем добавлять элементы в лист.
            public book(double _number, string _avtor, string _name, int _year, int _instock)
            {
                number = _number;
                avtor = _avtor;
                name = _name;
                year = _year;
                instock = _instock;
            }
        }
 
        List<book> books = new List<book>();
 
        // создаём структуру, с которой мы будем считывать.
        public struct newbook
        {
            public double number;
            public string avtor;
            public string name;
            public int year;
            public int instock;
 
            // создаём конструктор, при помощи которого будем добавлять элементы в лист.
            public newbook(double _number, string _avtor, string _name, int _year, int _instock)
            {
                number = _number;
                avtor = _avtor;
                name = _name;
                year = _year;
                instock = _instock;
            }
        }
 
        List<newbook> newbooks = new List<newbook>();
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            // убираем лишнюю строку снизу(при запуске программы снизу появляется дополнительная строчка, она нам
            // не нужна).
            dataGridView1.AllowUserToAddRows = false;
 
            // добавляем элементы в лист.
            books.Add(new book(128.71, "Виктор Франкл", "Сказать жизни Да – психолог в концлагере", 2011, 1));
            books.Add(new book(124.12, "Бурислав Сервест", "Магия Бессмертия 45. Пути Вечности", 2021, 1));
            books.Add(new book(523.92, "Джон Брандт", "Астрофизика солнечной системы", 1967, 2));
            books.Add(new book(321.76, "Дэвид Хелд", "Модели демократии", 2014, 1));
            books.Add(new book(395.34, "Стейнерт Алексей", "Всё про этикет. Иллюстрированный гид", 2017, 3));
            books.Add(new book(128.55, "Андрей Гартвич", "1С:Бухгалтерия 8 как на ладони", 2015, 1));
            books.Add(new book(347.27, "Андрей Батяев", "Гражданское право. Шпаргалка", 2009, 2));
            books.Add(new book(617.78, "Вадим Бондарь", "История зрения: путь от светочувствительности до глаза", 2020, 1));
            books.Add(new book(784.26, "Александр Варламов", "Полная школа пения", 2008, 1));
            books.Add(new book(536.41, "Евгений Агеев", "Неравновесная термодинамика в вопросах и ответах", 2019, 3));
            books.Add(new book(535.42, "Рудольф Глаубер", "Оптическая когерентность и статистика фотонов", 1966, 3));
            books.Add(new book(593.75, "Эрнест Бойко", "Позднетриасовые Hydrozoa Юго-Восточного Памира", 2011, 2));
            books.Add(new book(629.28, "Юрий Андреяшкин", "Рыбы и рыбалка", 1988, 1));
            books.Add(new book(669.76, "Валентин Никифоров", "Технология металлов и других конструкционных материалов", 2015, 2));
 
            // создаём таблицу, куда будем передавать названия стобцов и строк.
            DataTable table = new DataTable();
            table.Columns.Add("УДК", typeof(double));
            table.Columns.Add("Автор", typeof(string));
            table.Columns.Add("Название", typeof(string));
            table.Columns.Add("Год издания", typeof(int));
            table.Columns.Add("В наличии", typeof(int));
 
            // добавляем в каждую строку нашу запись.
            for (int i = 0; i < books.Count; i ++)
            {
                table.Rows.Add(books[i].number, books[i].avtor, books[i].name, books[i].year, books[i].instock);
            }
 
            // делаем все ячейки таблицы нужного размера.
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            dataGridView1.DataSource = table;
 
            // добавляем запись в каждую строку в структуру для считывания.
            for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                newbooks.Add(new newbook(Convert.ToDouble(dataGridView1[0, i].Value.ToString()), dataGridView1[1, i].Value.ToString(), dataGridView1[2, i].Value.ToString(), Convert.ToInt32(dataGridView1[3, i].Value.ToString()), Convert.ToInt32(dataGridView1[4, i].Value.ToString())));
            }
 
            // записываем всё со структуры в файл.
            FileStream fs = new FileStream("input.txt", FileMode.Append, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);
 
            for (int i = 0; i < newbooks.Count; i++)
            {
                sw.WriteLine(newbooks[i].number + " " + newbooks[i].avtor + " " + newbooks[i].name + " " + newbooks[i].year + " " + newbooks[i].instock);
            }
            sw.Close();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            bookdelete newForm = new bookdelete();
            newForm.Show();
        }
    }
}
Код формы с кнопкой и TextBox'ом:

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
38
39
40
41
42
43
44
45
46
47
48
49
namespace KURSOVAYA
{
    public partial class bookdelete : Form
    {
        public bookdelete()
        {
            InitializeComponent();
        }
 
         // задаём свойства для textbox.
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            // запись чисел только от 0 до 9.
            if ((e.KeyChar >= '0') && (e.KeyChar <= '9'))
            {
                return;
            }
            // меняем запятые на точки(чтобы соответствовало записи УДК).
            if (e.KeyChar == ',')
            {
                e.KeyChar = '.';
            }
            // запись только одной точки.
            if (e.KeyChar == '.')
            {
                if (textBox1.Text.IndexOf('.') != -1)
                {
                    e.Handled = true;
                }
                return;
            }
            // при нажатии Enter срабатывает кнопка button1.
            if (Char.IsControl (e.KeyChar))
            {
                if (e.KeyChar == (char)Keys.Enter)
                    button1.Focus();
                return;
            }
            e.Handled = true;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            {
                MessageBox.Show("Книга удалена.");
            }
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.06.2022, 21:33
Ответы с готовыми решениями:

Добавление в одномерный массив нового элемента через textBox. И удаление любого элемента массива
Помогите!! Неделю уже голову ломаю не могу додуматься. Создать класс который будет управлять...

DataGridView - textbox вставка через меню и через клавиатуру, распределение по всем textbox
Ребята подскажите можно ли в DataGridView, который содержит textbox, вставить данные так, чтобы они...

Удаление из dataGridView в другом dataGridView на другой форме подключенным через bindingSource!
Есть две формы, на первом есть dataGridView с подключенной таблицей Access и вторая форма с...

Удаление строк из datagridview по значению textBox (Access)
Как удалить строку из таблицы, которая выводится через датагривью на форму? база данных в аксесе. (...

Фильтрация в DataGridView через TextBox
Помогите, надо сделать фильтрацию при вводе в textbox1 он мне выводит по фамилии, а если в вести в...

1
2089 / 1501 / 389
Регистрация: 26.06.2017
Сообщений: 4,293
25.06.2022, 00:57 2
Лучший ответ Сообщение было отмечено FoXoDoX как решение

Решение

FoXoDoX, код, как бы так сказать, кривоват что ли.
1. Для привязки данных к dataGridView не обязательно загонять данные в таблицу, можно напрямую привязать список books.
2. Структуры обычно используются для передачи в вызовы WinAPI во всех остальных случаях следует использовать в коде классы. Другими словами измените newbook и book на классы.
3. Сделайте список books общим (public). Т.к. его можно считать частью модели данных, то работать надо с ним. DataGridView в данном случае совершенно не нужен, почему станет ясно ниже.
4. Классы (структуры) book и newbook одинаковы по структуре, поэтому newbook следует исключить и кода.
5. Код в textBox1_KeyPress мягко говоря странный, но обсуждение его выходит за рамки данной темы. Скажу только одно - этот код бесполезен при вставке из буфера обмана ))
6. На вопрос "как передавать значение ... в другую форму, чтобы проверить на совпадение", а также "не знаю, как реализовать удаление" ответ прост - необходимо найти нужный объект в источнике (books) и удалить его, всё остальное обновится автоматически, ну почти автоматически (см. п.7).
7. Так как список books не поддерживает событий изменения в нём, то либо нужно добавить в проект BindingSource и работать с ним, либо вызывать метод Invalidate у контролов самостоятельно. Второе абсолютный костыль, но многие так делают (я не рекомендую).

Добавлено через 1 час 53 минуты
Как-то так.
Основная форма
Кликните здесь для просмотра всего текста
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
using System.ComponentModel;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        // книга.
        public class book
        {
            public double number { get; set; }
            public string avtor { get; set; }
            public string name { get; set; }
            public int year { get; set; }
            public int instock { get; set; }
 
            // конструктор класса
            public book(double _number, string _avtor, string _name, int _year, int _instock)
            {
                number = _number;
                avtor = _avtor;
                name = _name;
                year = _year;
                instock = _instock;
            }
        }
 
        // класс привязываемого списка книг
        public class Books : BindingList<book> { }
 
        //объявляем переменную коллекции книг
        public static Books books = new Books();
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            // добавляем элементы в коллецию.
            books.Add(new book(128.71, "Виктор Франкл", "Сказать жизни Да – психолог в концлагере", 2011, 1));
            books.Add(new book(124.12, "Бурислав Сервест", "Магия Бессмертия 45. Пути Вечности", 2021, 1));
            books.Add(new book(523.92, "Джон Брандт", "Астрофизика солнечной системы", 1967, 2));
            books.Add(new book(321.76, "Дэвид Хелд", "Модели демократии", 2014, 1));
            books.Add(new book(395.34, "Стейнерт Алексей", "Всё про этикет. Иллюстрированный гид", 2017, 3));
            books.Add(new book(128.55, "Андрей Гартвич", "1С:Бухгалтерия 8 как на ладони", 2015, 1));
            books.Add(new book(347.27, "Андрей Батяев", "Гражданское право. Шпаргалка", 2009, 2));
            books.Add(new book(617.78, "Вадим Бондарь", "История зрения: путь от светочувствительности до глаза", 2020, 1));
            books.Add(new book(784.26, "Александр Варламов", "Полная школа пения", 2008, 1));
            books.Add(new book(536.41, "Евгений Агеев", "Неравновесная термодинамика в вопросах и ответах", 2019, 3));
            books.Add(new book(535.42, "Рудольф Глаубер", "Оптическая когерентность и статистика фотонов", 1966, 3));
            books.Add(new book(593.75, "Эрнест Бойко", "Позднетриасовые Hydrozoa Юго-Восточного Памира", 2011, 2));
            books.Add(new book(629.28, "Юрий Андреяшкин", "Рыбы и рыбалка", 1988, 1));
            books.Add(new book(669.76, "Валентин Никифоров", "Технология металлов и других конструкционных материалов", 2015, 2));
 
            // отключаем добавление данных в сетке
            dataGridView1.AllowUserToAddRows = false;
 
            // делаем все ячейки таблицы нужного размера.
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            dataGridView1.AutoGenerateColumns = true;
            dataGridView1.DataSource = books;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            bookdelete newForm = new bookdelete();
            newForm.Show();
        }
 
    }
}

Форма удаления данных (на ней текстбокс и кнопка)
Кликните здесь для просмотра всего текста
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
using System;
using System.Windows.Forms;
using static WindowsFormsApp1.Form1;
 
namespace WindowsFormsApp1
{
    public partial class bookdelete : Form
    {
        public bookdelete()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            book bk = FindBookByNumber(double.Parse(textBox1.Text));
            if (!(bk == null))
            {
                books.Remove(bk);
            }
        }
 
        private book FindBookByNumber(double number)
        {
            book result = null;
            foreach (book bk in books)
            {
                if (bk.number == number)
                {
                    result = bk;
                    break;
                }
            }
            return result;
        }
    }
}


Добавлено через 5 минут
Подумалось, что метод FindBookByNumber нужно инкапсулировать в класс Books, но и так сойдёт.
1
25.06.2022, 00:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2022, 00:57
Помогаю со студенческими работами здесь

Поиск по DataGridView через TextBox
Доброго времени суток. Имеется форма на форме dataGridView и textBox. Как осуществить поиск по...

Поиск через TextBox в DataGridView
Привет! Подскажите пожалуйста, есть ли примеры хорошего поиска на c# winform через textbox? Не могу...

Редактирование DataGridview через textbox
Есть таблица в которую через текстбоксы нужно добавить данные. Как сделать, чтобы при добавление...

Фильтрация DataGridView через textbox
Здравствуйте, подключаю к datagridview баз таким образом using Npgsql; try { ...

Поиск по datagridview через textbox
Знаю такой вопрос часто задают,но у меня крайний случай. Вот сам код: private: System::Void...


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

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