Member 12562978 Ответов: 1

Что касается строго типизированного набора данных в приложении 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 с именами клиентов как часть уже добавленных записей.

1 Ответов

Рейтинг:
0

Patrice T

Научитесь правильно делать отступы в вашем коде, это покажет его структуру, и это поможет чтению и пониманию.

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 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]
Отладка кода C# в Visual Studio - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Member 12562978

пполиморф. Я уже отладил код и попытался выяснить, почему строки не очищаются, но он все еще не очищается в визуализаторе данных.Я не понимаю причины, вот почему я спрашиваю.