Как обновить datagridview c
Перейти к содержимому

Как обновить datagridview c

  • автор:

Обновление данных с помощью TableAdapter в приложениях платформа .NET Framework

Наборы данных и связанные классы являются устаревшими технологиями платформа .NET Framework с начала 2000-х годов, которые позволяют приложениям работать с данными в памяти во время отключения приложений от базы данных. Они особенно полезны для приложений, которые позволяют пользователям изменять данные и сохранять изменения обратно в базу данных. Хотя наборы данных оказались очень успешными, мы рекомендуем новым приложениям .NET использовать Entity Framework Core. Entity Framework предоставляет более естественный способ работы с табличными данными в виде объектных моделей, и он имеет более простой интерфейс программирования.

После изменения и проверки данных в набор данных можно отправить обновленные данные обратно в базу данных, вызвав Update метод TableAdapter. Метод Update обновляет одну таблицу данных и выполняет правильную команду ( INSERT или UPDATE DELETE ) на RowState основе каждой строки данных в таблице. Если набор данных содержит связанные таблицы, Visual Studio создает класс TableAdapterManager, используемый для выполнения обновлений. Класс TableAdapterManager гарантирует, что обновления выполняются в правильном порядке на основе ограничений внешнего ключа, определенных в базе данных. При использовании элементов управления с привязкой к данным архитектура привязки данных создает переменную-член класса TableAdapterManager с именем tableAdapterManager.

При попытке обновить источник данных с содержимым набора данных можно получить ошибки. Чтобы избежать ошибок, рекомендуется поместить код, вызывающий метод адаптера Update в try / catch блоке.

Точную процедуру обновления источника данных можно изменить в зависимости от бизнес-потребностей, но включает следующие действия.

  1. Вызовите метод адаптера Update в блоке try / catch .
  2. Если обнаружено исключение, найдите строку данных, вызвавшей ошибку.
  3. Примирите проблему в строке данных (программным способом, если вы можете, или путем представления недопустимой строки пользователю для изменения), а затем повторите попытку обновления (HasErrors, GetErrors).

Сохранение данных в базу данных

Update Вызовите метод TableAdapter. Передайте имя таблицы данных, содержащей значения, записываемые в базу данных.

Обновление базы данных с помощью TableAdapter

  • Заключите метод TableAdapter Update в try / catch блок. В следующем примере показано, как обновить содержимое Customers таблицы из/ NorthwindDataSet try catch блока.
try < this.Validate(); this.customersBindingSource.EndEdit(); this.customersTableAdapter.Update(this.northwindDataSet.Customers); MessageBox.Show("Update successful"); >catch (System.Exception ex)
Try Me.Validate() Me.CustomersBindingSource.EndEdit() Me.CustomersTableAdapter.Update(Me.NorthwindDataSet.Customers) MsgBox("Update successful") Catch ex As Exception MsgBox("Update failed") End Try 

Связанный контент

элемент управления DataGridView (Windows Forms)

Элемент управления DataGridView предоставляет мощный и гибкий способ отображения данных в табличном формате. Элемент управления DataGridView можно использовать для отображения представлений небольшого объема данных только для чтения, либо можно масштабировать его для отображения редактируемого представления очень больших наборов данных.

Для того чтобы реализовать пользовательское поведение в приложениях, элемент управления DataGridView можно расширить несколькими способами. Например, можно программно задать собственные алгоритмы сортировки, можно создать собственные типы ячеек. Внешний вид элемента управления DataGridView легко настраивается заданием значений нескольких свойств. В качестве источника данных могут использоваться хранилища данных различных типов, также элемент управления DataGridView может работать без привязанного к нему источника данных.

В подразделах данного раздела описываются принципы и методы применения возможностей DataGridView в приложениях.

В этом разделе

Общие сведения об элементе управления DataGridView
Содержит разделы с описанием назначения и основных понятий элемента управления DataGridView Windows Forms.

Стандартная функциональность элемента управления DataGridView в Windows Forms
Описание внешнего вида и поведения элемента управления DataGridView Windows Forms по умолчанию, когда он привязан к источнику данных.

Типы столбцов элемента управления DataGridView в Windows Forms
Описание типов столбцов элемента управления DataGridView Windows Forms, используемых для отображения данных, и разрешения пользователям изменять или добавлять данные.

Базовое форматирование и оформление элемента управления DataGridView в Windows Forms
Разделы, описывающие способы изменения базового внешнего вида элемента управления и форматирования отображаемых данных ячейки.

Отображение данных с помощью элемента управления DataGridView в Windows Forms
Разделы, описывающие заполнение элемента управления данными вручную или из внешнего источника данных.

Изменение размера столбцов и строк элемента управления DataGridView в Windows Forms
Разделы, описывающие автоматическую корректировку размера строк и столбцов в соответствии с содержимым ячейки или доступной шириной элемента управления.

Ввод данных с помощью элемента управления DataGridView в Windows Forms
Разделы, в которых описывается изменение способов добавления и изменения данных в элементе управления.

Настройка элементов управления DataGridView в Windows Forms
Разделы, описывающие пользовательскую отрисовку ячеек и строк DataGridView , а также создание производных ячеек, столбцов и типов строк.

Оптимизация производительности элемента управления DataGridView в Windows Forms
Разделы, описывающие, как эффективно использовать элемент управления, чтобы избежать снижения производительности при работе с большими объемами данных.

Выполняемая по умолчанию обработка событий мыши и клавиатуры элементом управления DataGridView в Windows Forms
Описание способов взаимодействия пользователей с элементом управления DataGridView посредством клавиатуры и мыши.

Различия элементов управления DataGridView и DataGrid в Windows Forms
Описывает расширение возможностей и улучшения элемента управления DataGridView , который заменяет элемент управления DataGrid.

Ссылка

DataGridView
Справочная документация по элементу управления DataGridView.

BindingSource
Содержит справочную документацию по компоненту BindingSource. Элемент управления DataGridView и компонент BindingSource предназначены для совместной работы.

См. также

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Как обновить dataGridView в C#, не закрывая форму?

Здравствуйте! Если кто сталкивался с этим, подскажите, как обновить dataGridView , не закрывая форму. Вот код программы. Пользователь вводит название в текстовое поле, нажимает кнопку Browse и выбирате изображение. Нажимает кнопку Add и все это добавляет в базу данных. Чтобы отобразились данные в dataGridView , нужно сперва закрыть форму, затем открыть. Как сделать так, чтобы форму не закрывать, а нажать на кнопку Refresh и данные, только что введенные, отобразились в dataGridView . dataGridView1.Refresh() и dataGridView1.Update() не обновляют данные. Подскажите. Вот код:

public partial class Form1 : Form < string pathImageBrand = string.Empty; public Form1() < InitializeComponent(); >//кнопка Browse private void button1_Click(object sender, EventArgs e) < openFileDialog1.Filter = "Images (*.jpg; *.jpeg; *.gif; *.bmp; *.ico; *.png) | *.jpg; *.jpeg; *.gif; *.bmp; *.ico; *.png"; if(openFileDialog1.ShowDialog() == DialogResult.OK) < pathImageBrand = openFileDialog1.FileName.ToString(); >> //кнопка Add private void button2_Click(object sender, EventArgs e) < string stringConnect = @"server=localhost;user string sql = "INSERT INTO avto VALUES('"+textBox1.Text+"', @imgBrands)"; byte[] imgBrands = null; FileStream fsBrand = new FileStream(pathImageBrand, FileMode.Open, FileAccess.Read); BinaryReader brBrand = new BinaryReader(fsBrand); imgBrands = brBrand.ReadBytes((int)fsBrand.Length); using(MySqlConnection connect = new MySqlConnection(stringConnect)) < connect.Open(); MySqlCommand command = new MySqlCommand(sql, connect); command.Parameters.Add(new MySqlParameter("@imgBrands", imgBrands)); int x = command.ExecuteNonQuery(); MessageBox.Show(x.ToString() + "record(s) saved"); >textBox1.Clear(); > //кнопка Refresh private void button3_Click(object sender, EventArgs e) < //обновить таблицу не закрывая, а затем открывая форму //dataGridView1.Update(); dataGridView1.Refresh(); >private void Form1_Load(object sender, EventArgs e) < // TODO: This line of code loads data into the 'abcDataSet.avto' table. You can move, or remove it, as needed. this.avtoTableAdapter.Fill(this.abcDataSet.avto); >> 

Отслеживать

2,508 2 2 золотых знака 12 12 серебряных знаков 25 25 бронзовых знаков

Как обновить DataGridView

Author24 — интернет-сервис помощи студентам

Пытаюсь отобразить данные из БД используя Entity FrameWork.
Беру данные из comboBox, заполняю переменные значениями из Боксов и через switch пытаюсь сделать ветвление.
Запрос к БД уже проверил, он рабочий, но dataGridView отказывается отображать результат.

public partial class Form1 : Form < PoverkaContext context = new PoverkaContext(); readonly string[] invent = new string[] < "Гигрометры", "Тонометры", "Аудиометры", "Весы", "Ростомеры", "Термометры", "Пульсоксиметры" >; readonly int[] filial = new int[] < 51, 40, 49, 23, 55, 64, 52, 24, 45, 54, 70, 15, 16, 21, 27, 35, 36, 41, 46, 53 >; public Form1() < InitializeComponent(); // Выбор из таблицы по филиалу и прибору comboBox1.DataSource = filial; comboBox2.DataSource = invent; var SelectedInventory = (string)comboBox2.SelectedItem; var Filials = (int)comboBox1.SelectedItem; switch(SelectedInventory) < case "Термометры": var term = (from tx in context.Termometrs where tx.FilialId == Filials select tx).ToList(); dataGridView1.DataSource = term; dataGridView1.Update(); dataGridView1.Refresh(); break; >>

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как обновить DataGridView из Form2?
В Form2 вносятся изменения в базу данных, после чего необходимо обновить DataGridView. Как это.

Как обновить List из datagridview
Помогите пожалуйста у меня есть datagridview в качестве источника данных привязан List<Class>. Надо.

Как обновить dataGridView не закрывая форму?
Здравствуйте! Если кто сталкивался с этим, подскажите, как обновить dataGridView не закрывая форму.

1471 / 928 / 452
Регистрация: 06.02.2012
Сообщений: 2,847

kura1,
Если dataGridView1 на этапе загрузки имела данные, то повторно их не отобразить. Задайте перед установкой нового источника данных

1 2 3
var term = (from tx in context.Termometrs where tx.FilialId == Filials select tx).ToList(); dataGridView1.DataSource = null; dataGridView1.DataSource = term;

Добавлено через 1 минуту
А так лучше используйте BindingSource или BindingList
Регистрация: 09.02.2022
Сообщений: 17
Попробовал сначала вот так, dataGridView1 не имела данных при старте приложения:

var term = (from tx in context.Termometrs where tx.FilialId == Filials select tx).ToList(); dataGridView1.DataSource = null; dataGridView1.DataSource = term;

Потом через BindingSource,тоже не помогло, может быть дело в том что я как то не привильно работаю с ComboBox-ами ?

1471 / 928 / 452
Регистрация: 06.02.2012
Сообщений: 2,847

Лучший ответ

Сообщение было отмечено kura1 как решение

Решение

ЦитатаСообщение от kura1 Посмотреть сообщение

может быть дело в том что я как то не привильно работаю с ComboBox-ами ?

Да верно я тоже просмотрел. У вас при старте программы переменная SelectedInventory
будет иметь значение = Гигрометры а switch у вас только case «Термометры»: нечего не выведит.

И создайте событие по выборке данных, например по кнопки, так как выше код будет работать только один раз при запуске программы.

Добавлено через 1 минуту

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
private void button1_Click(object sender, EventArgs e) { var SelectedInventory = (string)comboBox2.SelectedItem; var Filials = (int)comboBox1.SelectedItem; switch (SelectedInventory) { case "Термометры": var term = (from tx in context.Termometrs where tx.FilialId == Filials select tx).ToList(); dataGridView1.DataSource = null; dataGridView1.DataSource = term; break; } }

Эксперт по электронике

2898 / 1943 / 529
Регистрация: 04.09.2018
Сообщений: 6,631
Записей в блоге: 4

ЦитатаСообщение от Kazbek17 Посмотреть сообщение

dataGridView1.DataSource = null;

1471 / 928 / 452
Регистрация: 06.02.2012
Сообщений: 2,847

ЦитатаСообщение от wizard41 Посмотреть сообщение

Ну не знаю не знаю. Если источник был привязан первый раз при запуске программы да еще и List данные не обновятся. Нужно будет dgv.DataSource = null. А если использовать BindingList то тогда null не нужен.

Эксперт по электронике

2898 / 1943 / 529
Регистрация: 04.09.2018
Сообщений: 6,631
Записей в блоге: 4

ЦитатаСообщение от Kazbek17 Посмотреть сообщение

Ну не знаю не знаю.

Уж сколько я с этими гридами работал, так у меня всегда был только один метод обновления, типа такого:

void DgvUpadate() { dgv1.DataSource = что_то_там; }

Не встречал еще проблем с этим, без присваивания гриду null.

ЦитатаСообщение от Kazbek17 Посмотреть сообщение

Если источник был привязан первый раз при запуске программы да еще и List данные не обновятся
Регистрация: 09.02.2022
Сообщений: 17
Привязка к кнопке помогла , благодарю .
1471 / 928 / 452
Регистрация: 06.02.2012
Сообщений: 2,847

ЦитатаСообщение от wizard41 Посмотреть сообщение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
ListI_do_not_believe> DBList = new ListI_do_not_believe>(); public class I_do_not_believe { public string Property1 { get; set; } public string Property2 { get; set; } public string Property3 { get; set; } } //Подключаем источник List при загрузки формы private void Form1_Load(object sender, EventArgs e) { dgv.DataSource = DBList; } //пробуем добавить :) private void button4_Click(object sender, EventArgs e) { DBList.Add(new I_do_not_believe() { Property1 = "Value1", Property2 = "Value2", Property3 = "Valu3" }); //Расскоментируем кто не верит :) //dgv.DataSource = null; dgv.DataSource = DBList; }

Эксперт по электронике

2898 / 1943 / 529
Регистрация: 04.09.2018
Сообщений: 6,631
Записей в блоге: 4

kura1, дополню ответ Kazbek17 тем, что можно делать новые выборки из БД и по событиям изменения выбора в combobox’ах. В этом случае можно избавиться от лишнего движения, типа нажатия кнопки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *