Что касается строго типизированного набора данных в приложении windows form
Я разрабатываю одно простое приложение для выставления счетов, в котором у меня есть простой модуль экрана клиента.Клиент может иметь любое количество записей GST в Datagridview.Экран основан на отношениях Customer Masters(текстовые поля) и Customers Master Details(Datagridview) через внешние ключи. И я использую строго типизированный набор данных в этом проекте в качестве xsd-файла.Этот экран имеет 3 кнопки,то есть меню New, Save и Find toolstrip.
Когда я начинаю добавлять записи после нажатия кнопки New Buttonstrip и and save ,он успешно сохраняет их, а когда я нажимаю New, В идеале он должен очистить строки.Главная проблема здесь заключается в том, что он не очищает строки??
Я прилагаю сюда файл cs.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace GST.Masters { public partial class Customers : Heptanesia.Winforms.Ui.Forms.MainUC { public static string recCode { get; set; } public string RC; public bool insertFlag; public Data.GSTDb.CustomersRow r; public Data.GSTDb.CustomersGSTNosRow gr; public Data.GSTDb.CustomersDataTable dt = new Data.GSTDb.CustomersDataTable(); public Customers() { InitializeComponent(); recCode = Guid.NewGuid().ToString(); this.Load += new EventHandler(this.Customers_Load); this.Ts.SaveClicked += new Heptanesia.Winforms.Ui.Menu.ToolStrip.SaveClickedEventHandler(this.Ts_SaveClicked); this.Ts.AddNewClicked += new Heptanesia.Winforms.Ui.Menu.ToolStrip.AddNewClickedEventHandler(this.Ts_AddNewClicked); this.Ts.SearchClicked += new Heptanesia.Winforms.Ui.Menu.ToolStrip.SearchClickedEventHandler(this.Ts_SearchClicked); this.DgGST.CellValidated += (sender, e) => { string name = this.DgGST.Columns[e.ColumnIndex].Name; if (name == "DGCCountryCode") { name = this.DgGST.Rows[e.RowIndex].Cells[name].Value.ToString(); this.statesBindingSource.Filter = "ParentCode = '" + name + "'"; if (!this.FormIsLoading) { this.DgGST.Rows[e.RowIndex].Cells["DGCStateCode"].Value = null; this.DgGST.Rows[e.RowIndex].Cells["DGCCityCode"].Value = null; } } else if (name == "DGCStateCode") { name = this.DgGST.Rows[e.RowIndex].Cells[name].Value.ToString(); this.citiesBindingSource.Filter = "ParentCode = '" + name + "'"; if (!this.FormIsLoading) { this.DgGST.Rows[e.RowIndex].Cells["DGCCityCode"].Value = null; } } }; } private void Ts_AddNewClicked(object sender, EventArgs e) { this.gSTDb.Customers.Rows.Clear(); r = this.gSTDb.Customers.NewCustomersRow(); this.gSTDb.Customers.AddCustomersRow(r); Data.GSTDbTableAdapters.CustomersGSTNosTableAdapter CGT = new Data.GSTDbTableAdapters.CustomersGSTNosTableAdapter(); CGT.FillByParentCode(gSTDb.CustomersGSTNos, r.RecCode); } private void Ts_SearchClicked(object sender, EventArgs e) { Heptanesia.Winforms.Ui.Forms.SearchForm sf = new Heptanesia.Winforms.Ui.Forms.SearchForm(); sf.DataSource = new Data.GSTDbTableAdapters.CustomersTableAdapter().GetData(); sf.DisplayColumns = new string[] { "Name" }; sf.DisplayHeaders = new string[] { "Customers Name" }; sf.DisplayWidths = new int[] { 200 }; if (sf.ShowDialog(this) == DialogResult.OK) { this.RC = sf.ReturnRow["RecCode"].ToString(); this.customersTableAdapter.FillByRecCode(this.gSTDb.Customers, RC); } } private void Ts_SaveClicked(object sender, EventArgs e) { string message = "Error: "; try { this.customersBindingSource.EndEdit(); //if (this.DgGST.CurrentRow.DataBoundItem != null) this.fkCustomerGSTNosCustomersBindingSource.EndEdit(); if (this.gSTDb.Customers.HasErrors) message += Classes.Global.SetBindingSourcePositionAndGetError(this.customersBindingSource, this.gSTDb.Customers.GetErrors()[0]); else if (this.gSTDb.CustomersGSTNos.HasErrors) message += Classes.Global.SetBindingSourcePositionAndGetError(this.fkCustomerGSTNosCustomersBindingSource, this.gSTDb.CustomersGSTNos.GetErrors()[0]); else { this.gSTDb.Customers.BeforeSave(); this.gSTDb.CustomersGSTNos.BeforeSave(); Data.GSTDbTableAdapters.TableAdapterManager tm = new Data.GSTDbTableAdapters.TableAdapterManager(); tm.CustomersTableAdapter = this.customersTableAdapter; tm.CustomersGSTNosTableAdapter = this.customersGSTNosTableAdapter; tm.UpdateAll(this.gSTDb); message = "Record(s) Saved Successfully"; } } catch (Exception ex) { message += ex.Message; } MessageBox.Show(message, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void Customers_Load(object sender, EventArgs e) { this.FormIsLoading = true; this.customersTableAdapter.Fill(this.gSTDb.Customers); this.customersGSTNosTableAdapter.Fill(this.gSTDb.CustomersGSTNos); this.countriesTableAdapter.Fill(this.gSTDb.Countries); this.statesTableAdapter.Fill(this.gSTDb.States); this.citiesTableAdapter.Fill(this.gSTDb.Cities); this.gSTDb.Customers.Rows.Clear(); if (this.gSTDb.Customers.Rows.Count == 0) { Data.GSTDb.CustomersRow r = this.gSTDb.Customers.NewCustomersRow(); this.gSTDb.Customers.AddCustomersRow(r); } this.FormIsLoading = false; } private void DgGST_DataError(object sender, DataGridViewDataErrorEventArgs e) { if (e.Exception is ArgumentException) { object value = DgGST.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; if (!((DataGridViewComboBoxColumn)DgGST.Columns[e.ColumnIndex]).Items.Contains(value)) { ((DataGridViewComboBoxCell)DgGST[e.ColumnIndex, e.RowIndex]).Value = DBNull.Value; //((DataGridViewComboBoxColumn)dgv.Columns[e.ColumnIndex]).Items.Add(value); e.ThrowException = false; } } else { MessageBox.Show(e.Exception.Message); e.Cancel = true; } } } }
Что я уже пробовал:
Все, что я могу сделать.
1)Очистка строк через строки.Четкий();
2)я попытался очистить источник привязки и DataGridview после установки его null.
Ничего Не Помогало.
Richard MacCutchan
Пожалуйста, сделайте отступы в вашем коде правильно, чтобы он был читабельным. Также объясните, где именно происходит ошибка и что вы подразумеваете под этим - Ничего Не Сработало".
Member 12562978
Ричард. На самом деле это не дает никакой ошибки, но моя забота заключается в том, что при нажатии на новую кнопку, то есть метод Ts_AddNewClicked, он должен очистить строки datagridview после добавления новых записей, чего здесь не происходит. Это моя забота.
Karthik_Mahalingam
использовать Ответить кнопка, чтобы отправить комментарии/запрос пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.
Member 12562978
Да.Вы можете помочь??
Karthik_Mahalingam
пробовать
dataGridView1.Rows.Четкий();
Member 12562978
Пытался.Он действительно работает, когда мы создаем новые строки в первый раз, но он не работает, когда мы добавляем строки и сохраняем их.
Karthik_Mahalingam
значит, после сохранения вам нужно его очистить ?
Member 12562978
Да.После сохранения, когда я нажимаю на кнопку New Toolstrip, она не очищает новые недавно добавленные записи или строки.Вы можете увидеть мой новый код кнопки, то есть метод Ts_AddNewClicked.Я попробовал dataGridView1.Rows.Clear(); но он не очищает строки.
Karthik_Mahalingam
звоните datagrdiveiw1.обновить()
после очистки.
Member 12562978
Сэр, DataGridview уже статически привязан к базе данных с помощью Dataset xsd. Так что здесь нет никакой динамической привязки.Так что здесь даже вызов refresh after clear() не очищает строки и, следовательно, не работает.Будет лучше, если вы запустите мой код и проверите.
Member 12562978
моя главная проблема заключается в том, что он очищает все строки при обновлении или добавлении.Тогда почему он не очищает недавно добавленные строки новых записей.
Karthik_Mahalingam
затем вам нужно будет очистить источник данных.
создайте фиктивный xsd и назначьте ему, когда вы хотите очистить строки.
Member 12562978
Сэр, когда я очищаю источник данных, он очищается.Но затем при поиске и щелчке по существующей записи он не показывает мне данные в gridview, потому что я уже очистил источник данных.
Karthik_Mahalingam
"нажмите на существующую запись, она не показывает мне данные в gridview "
где вы щелкаете?
Member 12562978
сэр, после сохранения новой записи/С.У меня есть одна кнопка поиска Toolstrip, которая показывает уже добавленные или существующие записи.Когда я нажимаю на кнопку поиска, она показывает окно с datagridview с именами клиентов как часть уже добавленных записей.