Обновление данных с помощью 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 блоке.
Точную процедуру обновления источника данных можно изменить в зависимости от бизнес-потребностей, но включает следующие действия.
- Вызовите метод адаптера Update в блоке try / catch .
- Если обнаружено исключение, найдите строку данных, вызвавшей ошибку.
- Примирите проблему в строке данных (программным способом, если вы можете, или путем представления недопустимой строки пользователю для изменения), а затем повторите попытку обновления (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?

Например, я хочу добавить 11 сотрудника я пишу в клетки данные о нём и как мне сделать так чтобы после нажатия на кнопку обновилось содержимое таблицы.
- Вопрос задан более года назад
- 430 просмотров
Комментировать
Решения вопроса 1
После добавления всех данных в строку делаете сохранение этих данных в БД и далее получаете данные таблицы с добавленной информацией.
Обработка нажатия кнопки:
int index = dataGridView.CurrentCell.RowIndex; string pib = dataGridView["PIB" , index].Value.ToString(); string address = dataGridView["_Address" , index].Value.ToString(); string phoneNumber = dataGridView["PhoneNumber" , index].Value.ToString();
далее эти данные пишем в БД, после запрашиваем таблицу с данными.
var dt = select данные из БД; dataGridView.DataSource = dt ;
Как обновить datagridview c
Профиль
Группа: Участник
Сообщений: 7
Регистрация: 31.7.2008
Репутация: нет
Всего: нет
Здравствуйте. Есть 2 формы. На 1 – ой форме расположен dataGridView1 и кнопка при нажатии которой открывается вторая форма. На 2 – ой расположен textBox1 и 2 кнопки, Ок и Cancel. При нажатии кнопки Ок данные из textBox1 заносятся в БД.
Как потом обновить записи в dataGridView1, после нажатия кнопки Ок, чтобы после добавления записи она сразу была бы видна в dataGridView1?
| Код |
| public partial class Form1 : Form private string sqlConnectString = @»Data Source=.\SQLEXPRESS;AttachDbFilename=c:\test.mdf;» + «Integrated security=SSPI;»; public Form1() InitializeComponent(); |
string sqlSelect = «SELECT * FROM TestTable»;
SqlDataAdapter da = new SqlDataAdapter(sqlSelect, sqlConnectString);
DataSet ds = new DataSet();
da.Fill(ds, «TestTable»);
dataGridView1.DataSource = ds.Tables[«TestTable»].DefaultView;
>
private void button1_Click(object sender, EventArgs e)
Form2 f2 = new Form2();
if(f2.ShowDialog() == DialogResult.OK)
MessageBox.Show(f2.textBox1.Text);
string sqlInsert = «INSERT INTO TestTable(Name) VALUES(‘» + f2.textBox1.Text + «‘)»;
SqlConnection conn = new SqlConnection(sqlConnectString);
conn.Open();
SqlCommand cmd = new SqlCommand(sqlInsert, conn);
cmd.ExecuteNonQuery();
conn.Close();
>
>
>
| Дата 4.8.2008, 12:56 (ссылка) | (нет голосов) Загрузка . |
Как обновить datagridview c
Имею две формы. На первой «MainForm» расположил TabControl в каждой вкладке TabControl перетащил из DataSources по таблице DataGridView.
Вторую форму «BucketForm» создаю по второму Ленискому завету
var f = new Forms.BucketForm(); f.Owner = this; f.ShowDialog();
Во второй форме колдую, изменяю данные которые на первой форме в таблицах.После закрытия второй формы, хочу чтобы данные в DataGridView первой формы обновились. Осуществляю это так
var main = this.Owner as MainForm; if (main != null) < //Первая таблица DataGridView прекрасно обновляется main.query2TableAdapter.Fill(main.contentDataSet.Query2); //Вторая таблица даже после всего ниже перечисленного не обновляется main.itemsTableAdapter.Fill(main.contentDataSet.Items); main.tableAdapterManager.UpdateAll(main.contentDataSet); main.itemsDataGridView.Update(); main.itemsDataGridView.Refresh(); >
Одна таблица обновляется, а другая низа что не хочет, пробовал уже все такое, но не обновляется
main.itemsTableAdapter.Fill(main.contentDataSet.Items); main.tableAdapterManager.UpdateAll(main.contentDataSet); main.itemsDataGridView.Update(); main.itemsDataGridView.Refresh();
DataSet у них общий contentDataSet
Последний раз редактировалось Таксист; 06.08.2015 в 23:57 .
Регистрация: 03.01.2014
Сообщений: 2,870
Напрямую через не визуальные классы не пробовали?
Форумчанин
Регистрация: 27.01.2014
Сообщений: 115
эх были бы вы на WPF, было бы всё проще.
Но гугл говорит о следующем:
У ТС данные из БД загружаются только при открытии формы
дело в том, что в базу у тебя данные попадают напрямую, а не через источник.
В твоём случае есть 2 варианта решения проблемы:
1) Сразу после добавления производить повторную загрузку данных
2) Работать с источником данных, а все сохранения проводить не прямым запросом, а адаптером (только предварительно настроить запросы обновления)
Пользователь
Регистрация: 11.12.2014
Сообщений: 66
Сообщение от Akeloya
эх были бы вы на WPF, было бы всё проще.
А почему на WPF все проще в этом плане?
Пользователь
Регистрация: 11.12.2014
Сообщений: 66
Сообщение от Streletz
через не визуальные классы[/URL] не пробовали?
Спасибо! Хорошая ссылка
Форумчанин
Регистрация: 27.01.2014
Сообщений: 115
Сообщение от Таксист
А почему на WPF все проще в этом плане?
Потому, что взаимосвязь между данными и формой их редактирования прокидывается очень просто.
Есть некоторый класс, в котором хранятся данные, чтобы датагрид увидел изменения, в этом классе реализуется интерфейс INotifyPropertyChanged
public List Chiled < get < return _chiled; >set < _chiled = value;OnPropertyChanged("Chiled"); >> public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] private void OnPropertyChanged([CallerMemberName] string propertyName = null)
Затем, создается обзорная коллекция, возвращающая соответствующие объекты коллекции:
private static List _categories; public static ObservableCollection GetCategories() < return new ObservableCollection(_categories); >
При этом в метод GetCategories можно добавить параметры, работающие в виде фильтра.
На форме вы выкидываете датапровайдер:
где core:Data — это класс, содержащий тот самый метод GetCategories
как вы могли заметить, GetCategories — статический, соответственно при неинициализированной переменной _categories будет ошибка. Переменная инициализируется при создании экземпляра класса, а вот данные можно загружать в любой момент, после инициализации ошибок при отсутствии данных не будет — будет возвращена пустая коллекция.
Как итог код выше гарантирует в случае инициализации класса Data и наличия объектов в хранилище, присутствие этих объектов в ObjectDataProvider на форме или в контроле. Остается привязать их:
Привязка иерархическая, разумеется. Т.е. я в контрол ничего руками не добавляю, я добавляю, как белый человек, данные в модель. А ObjectDataProvider их протягивает до визуализатора.
Если, вдруг, мне нужно принудительно обновить данные, я обращаюсь к ObjectDataProvider
((ObjectDataProvider)Resources["Templates"]).MethodParameters[0] = Invoice.Type; ((ObjectDataProvider)Resources["Templates"]).Refresh();
В коде выше показано так же и ручное добавление данных в параметры ObjectDataProvider
Кода много, но этот код гарантирует то, что данные изменяемые в контроле будут протянуты в объектную модель и данные добавленные в объектную модель попадут в контрол.
Т.е. я нигде не добавляю руками ничего в коллекцию Items контрола. Но всё, что будет изменено в контроле будет изменено и в данных.