Gridview удаляет предыдущую запись при попытке добавить новую запись - PullRequest
2 голосов
/ 22 марта 2019

У меня есть 1 оконная форма с 1 текстовым полем, где пользователь будет вводить ProductId, нажимать клавишу ввода и, исходя из этого, я хочу добавить записи в мое сеточное представление.

Теперь проблема заключается в том, что старые записи удаляются при поискеновый идентификатор продукта, поэтому у меня всегда есть только 1 запись в сетке, основанная на моем последнем поиске.

Так, например: Если у пользователя первый поиск по Идентификатору продукта = 1, тоон добавляется в сетку. Теперь, когда пользователь пытается добавить другой продукт Product Id = 2, чем Product Id = 1 удаляется, и теперь я вижу только запись Product ID = 2 в gridview

Код:

public partial class ProductScan : Form
{
    private BindingSource grdProductListBindingSource = new BindingSource();
    public ProductScan()
    {
        InitializeComponent();
    }

    private void ProductScan_Load(object sender, EventArgs e)
    {
        grdProductList.DataSource =  grdProductListBindingSource;
    }

    private void txtProductId_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            string pathName = txtFilePath.Text;
            string fileName = System.IO.Path.GetFileNameWithoutExtension(txtFilePath.Text);
            DataTable tbContainer = new DataTable();
            string strConn = string.Empty;
            string sheetName = fileName;

            FileInfo file = new FileInfo(pathName);
            if (!file.Exists) { throw new Exception("Error, file doesn't exists!"); }
            string extension = file.Extension;

            switch (extension)
            {
                case ".xls":
                        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
                        break;
                case ".xlsx":
                        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathName + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
                        break;
                default:
                        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
                        break;
            }
            string fieldSelector = "[ProductID], [ProductName], [MRP] ";
            string query = $"SELECT {fieldSelector} FROM [{sheetName}$A1:F15535] WHERE [ProductID] = {Convert.ToInt32(txtProductId.Text)}";
            using (OleDbConnection cnnxls = new OleDbConnection(strConn))
                using (OleDbDataAdapter oda = new OleDbDataAdapter(query, cnnxls))
                {
                    oda.Fill(tbContainer);
                    grdProductListBindingSource.DataSource = tbContainer;
                    grdProductList.AutoResizeColumns(
                            DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
                }
            e.Handled = true;
        }
    }

Я взял отсюда ссылку: https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-bind-data-to-the-windows-forms-datagridview-control

В чем здесь проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...