Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116

Обновление dataGridView

21.06.2024, 13:30. Показов 1162. Ответов 29

Студворк — интернет-сервис помощи студентам
Здравствуйте, хочу после добавления записи в таблицу обновить dataGridView. Добавление показывается после нового запуска программы.

C#
1
2
3
4
5
6
7
8
9
private void buttonInsert_Click(object sender, EventArgs e)
{
    SecondForm dlg = new SecondForm();
    if (P.a)
        dlg.ShowDialog();
    this.dataGridView1.Refresh();   
    //this.dataGridView1.Update();
    //data_show();
}
this.dataGridView1.Refresh(); и this.dataGridView1.Update(); не помогают, скорее всего из-за моего формирования.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void data_show()
{
    P.MyConnection.Open();
    string stm = "SELECT name_project_title,number_channels FROM project_title";
    var cmd = new SQLiteCommand(stm, P.MyConnection);
    rdr=cmd.ExecuteReader();
    while( rdr.Read()) {
        dataGridView1.Rows.Insert(0, rdr["name_project_title"].ToString() , rdr["number_channels"].ToString());
    }
    try
    {
        dataGridView1.CurrentCell = dataGridView1[0, 0];   /*курсор*/
    }
    catch (Exception ex)
    {
 
    }
    P.MyConnection.Close();
}

если я заново ссылаюсь при закрытии формы добавления на data_show(); , то дублируется первая запись



как правильно поступить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.06.2024, 13:30
Ответы с готовыми решениями:

Обновление DataGridView
Доброго времени суток! Помогите с курсовой. У меня есть 2 формы. 1. Автомобиль 2. Штрафы Есть общий столбец "ИИН...

Обновление dataGridView
имеется класс public class Item { public string name { get; private set; } public int...

Обновление DataGridView
Доброго времени суток. Дело в том, что у меня не получается обновить DataGridView из другой формы. Начну с того, что у меня есть 2 формы....

29
Эксперт .NET
 Аватар для Rius
13121 / 7681 / 1675
Регистрация: 25.05.2015
Сообщений: 23,441
Записей в блоге: 14
21.06.2024, 13:49
Данные надо хранить в DataTable и добавлять туда же.
0
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
21.06.2024, 14:07  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Данные надо хранить в DataTable и добавлять туда же.
Этот способ подошел, если после закрытия формы добавления вызывать data_show()

Когда, тогда использовать dataGridView1.Refresh();?

его же не просто так сделали, а что я заново вызываю, мне кажется это уловка/обход

или все таки нет?
0
Эксперт .NET
 Аватар для Rius
13121 / 7681 / 1675
Регистрация: 25.05.2015
Сообщений: 23,441
Записей в блоге: 14
21.06.2024, 14:30
При добавлении строк в datatable, привязанный к нему datagridview должен обновиться сам.
0
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
21.06.2024, 15:10  [ТС]
Rius,

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void data_show()
{
    P.MyConnection.Open();
    DataTable tbl= new DataTable("Titl");
    tbl.Columns.Add("Название проекта");
    tbl.Columns.Add("Количество каналов");
    string stm = "SELECT name_project_title,number_channels FROM project_title";
    var cmd = new SQLiteCommand(stm, P.MyConnection);
    rdr=cmd.ExecuteReader();
    while( rdr.Read()) {
        tbl.Rows.Add( rdr["name_project_title"].ToString() , rdr["number_channels"].ToString());
        dataGridView1.DataSource = tbl;
    }
    try
    {
        dataGridView1.CurrentCell = dataGridView1[0, 0];   /*курсор*/
    }
    catch (Exception ex)
    {
 
    }
    P.MyConnection.Close();
}

значит я не там это прописываю?
0
Эксперт .NET
 Аватар для Rius
13121 / 7681 / 1675
Регистрация: 25.05.2015
Сообщений: 23,441
Записей в блоге: 14
21.06.2024, 15:42
В конструкторе формы создайте таблицу и привяжите к гриду.
При чтении только заполняйте саму таблицу.
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,732
Записей в блоге: 1
21.06.2024, 15:52
И я бы рекомендовал сохранять тип данных. У вас столбец "Количество каналов" явно числовой, а вы его в строку превращаете rdr["number_channels"].ToString(), зачем?

Добавлено через 2 минуты
И чуть улучшим код вот так
C#
1
2
3
4
while( rdr.Read()) {
    tbl.Rows.Add( rdr["name_project_title"].ToString() , rdr["number_channels"].ToString());
}
dataGridView1.DataSource = tbl;
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
22.06.2024, 19:45
OdinNastya, По вашему коду из первого поста, в строке 8 вы используете метод .Insert у DGV, а нужно было .Add
0
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
24.06.2024, 08:49  [ТС]
Yury Komar, в 5 сообщении уже с .add делала, только в чем эта тонкая разница?


Цитата Сообщение от Uswer Посмотреть сообщение
вы его в строку превращаете rdr["number_channels"].ToString(), зачем?
в дальнейшем он у меня клеится в переменную строковую = Название + количество+ (кол. каналов), поэтому сразу его делаю стройкой

Цитата Сообщение от Rius Посмотреть сообщение
При чтении только заполняйте саму таблицу.
В конструкторе создать таблицу, а при вызове моей функции(data_show()) заполнять ?

Когда, тогда использовать dGV.Refresh();?

Добавлено через 8 минут
Цитата Сообщение от OdinNastya Посмотреть сообщение
строковую = Название + количество+ (кол. каналов), поэтому сразу его делаю стройкой
да.это глупо и бессмысленно, так как при добавлении к строке цифру, она автоматически становится строкой))))
сделала

C#
1
2
3
4
while( rdr.Read()) {
    tbl.Rows.Add( rdr["name_project_title"].ToString() , rdr.GetValue(1));
}
dataGridView1.DataSource = tbl;
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,732
Записей в блоге: 1
24.06.2024, 09:11
OdinNastya, Rius вам дал очень правильный вектор. Вам стоит либо полностью отказаться от цикла обновления данных и перейти на методы адаптера, либо создать класс данных (модель) и при помощи ридера обновлять списки этих моделей. Дело в том, что метод Fill адаптера достаточно элегантно обновляет данные в таблице, поэтому предпочтительнее использовать его.
1
Эксперт .NET
 Аватар для Rius
13121 / 7681 / 1675
Регистрация: 25.05.2015
Сообщений: 23,441
Записей в блоге: 14
24.06.2024, 09:18
Цитата Сообщение от OdinNastya Посмотреть сообщение
Когда, тогда использовать dGV.Refresh();?
Вот зачем? Руки чешутся?

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
using System;
using System.Data;
using System.Windows.Forms;
 
namespace OdinNastya
{
    public partial class Form1 : Form
    {
        Timer timer = new Timer();
        DataSet ds = new DataSet();
        DataTable table;
 
        public Form1()
        {
            InitializeComponent();
 
            table = ds.Tables.Add("table");
 
            table.Columns.Add(new DataColumn("id", typeof(long)));
            table.Columns.Add(new DataColumn("value", typeof(string)));
 
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = "table";
 
            timer.Interval = 500;
            timer.Tick += Timer_Tick;
            timer.Start();
        }
 
        private void Timer_Tick(object sender, EventArgs e)
        {
            table.Rows.Add(DateTime.Now.Ticks, DateTime.Now.ToLongTimeString());
        }
    }
}
Добавлено через 1 минуту
Да, из базы можно читать скопом готовыми методами, а не построчно вручную.
0
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
24.06.2024, 09:41  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Вот зачем? Руки чешутся?
нет!)

просто для понятия)

тоже самое, как многие часто используют rdr["..."].ToString() , но есть еще rdr.GetString(0) . И как правильно использовать, то один, то другой. В основном первый вариант используют

а я же научится хочу и чтобы сразу мыслей не было про Refresh))

Добавлено через 7 минут
Цитата Сообщение от Rius Посмотреть сообщение
table.Columns.Add(new DataColumn("id", typeof(long)));
для надо использовать new DataColumn?
tbl.Columns.Add("Название проекта");- я писала так)
0
Эксперт .NET
 Аватар для Rius
13121 / 7681 / 1675
Регистрация: 25.05.2015
Сообщений: 23,441
Записей в блоге: 14
24.06.2024, 09:44
Цитата Сообщение от OdinNastya Посмотреть сообщение
для надо использовать new DataColumn?
tbl.Columns.Add("Название проекта");- я писала так)
В данном случае без разницы.
0
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
24.06.2024, 09:52  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
table.Rows.Add(DateTime.Now.Ticks, DateTime.Now.ToLongTimeString());
И тут же оно через некоторое время добавляет, а не обновляет
0
Эксперт .NET
 Аватар для Rius
13121 / 7681 / 1675
Регистрация: 25.05.2015
Сообщений: 23,441
Записей в блоге: 14
24.06.2024, 09:54
Цитата Сообщение от OdinNastya Посмотреть сообщение
Здравствуйте, хочу после добавления записи в таблицу обновить dataGridView
????
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,732
Записей в блоге: 1
24.06.2024, 09:59
Rius, тут скорее речь про таблицу в СУБД.
1
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
24.06.2024, 10:04  [ТС]
Rius,
у меня есть главная форма и там dGV, так же на ней кнопка добавления.
при нажатии кнопки открывается форма2 и там идет добавление в бд.

после закрытия формы2, я хочу обновить dGV, а он обновляется, после перезапуска программы
0
Эксперт .NET
 Аватар для Rius
13121 / 7681 / 1675
Регистрация: 25.05.2015
Сообщений: 23,441
Записей в блоге: 14
24.06.2024, 10:06
Добавление идёт напрямую в БД через запросы?
Так-то dataset можно в форму передать и там добавить.
0
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
24.06.2024, 10:19  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Добавление идёт напрямую в БД через запросы?
дА)
0
Эксперт .NET
 Аватар для Rius
13121 / 7681 / 1675
Регистрация: 25.05.2015
Сообщений: 23,441
Записей в блоге: 14
24.06.2024, 10:39
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
using System;
using System.Data;
using System.Data.SQLite;
using System.Windows.Forms;
 
namespace OdinNastya
{
    public partial class Form1 : Form
    {
        SQLiteConnection connection;
        DataSet ds = new DataSet();
        DataTable table;
 
        public Form1()
        {
            InitializeComponent();
 
            table = ds.Tables.Add("example");
            var columnId = table.Columns.Add("id", typeof(long));
            columnId.AutoIncrement = true;
            columnId.Unique = true;
            table.PrimaryKey = new DataColumn[] { columnId };
            table.Columns.Add("value", typeof(string));
 
            connection = new SQLiteConnection("Data Source=:memory:");
            connection.Open();
 
            CreateTable(connection);
            InsertRecord(connection, "1");
            InsertRecord(connection, "10");
            InsertRecord(connection, "100");
            InsertRecord(connection, "1000");
 
            LoadData(connection);
        }
 
        private void CreateTable(SQLiteConnection connection)
        {
            var command = new SQLiteCommand(@"
CREATE TABLE example (
    id INTEGER PRIMARY KEY,
    value TEXT NOT NULL
);
",
                connection);
            command.ExecuteNonQuery();
        }
 
        private void InsertRecord(SQLiteConnection connection, string value)
        {
            var command = new SQLiteCommand(connection);
            command.CommandText = "insert into example (value) values (@value);";
            command.Parameters.Add("value", DbType.String).Value = value;
            command.ExecuteNonQuery();
        }
 
        private void LoadData(SQLiteConnection connection)
        {
            var command = new SQLiteCommand("select * from example", connection);
            var adapter = new SQLiteDataAdapter(command);
            adapter.Fill(table);
            dataGridView1.DataSource = table;
        }
 
        private void buttonAdd_Click(object sender, EventArgs e)
        {
            InsertRecord(connection, DateTime.Now.ToLongTimeString());
            //dataGridView1.DataSource = null;
            LoadData(connection);
        }
    }
}
Миниатюры
Обновление dataGridView  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.06.2024, 10:39
Помогаю со студенческими работами здесь

Обновление данных в DataGridView
Сразу скажу , что метод Refresh не помогает Суть такая, в textbox ввожу уникальный номер пользователя, выполняется поиск по этому номеру...

Обновление информации в DataGridView
Всем привет, я новичок в c#. У меня есть Datagridview в которую я подключил таблицу, подскажите пожалуйста как сделать что бы информация...

Обновление элемента DataGridView
Здравствуйте, коллеги! Разбираюсь с базами. Возник вопрос обновления DataGridView элемента. Я делаю это путём удаления построчно. При...

Обновление данных datagridview
Здравствуйте! Есть небольшое приложение Windows Forms которое работает с базой данных. Я реализовал добавление, обновление, удаление данных...

Обновление данных в datagridview
Всем привет! Сделал обновление данных в DataGridView следующим образом: BindingSource bs = null; bs = BindingSource {DataSource =...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru