«Индекс 1 является отрицательным или превышает количество строк». ошибка - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть форма с сеткой данных, которая связана с базой данных доступа. У меня проблемы с тем, чтобы кнопка обновления и кнопка удаления работали правильно. Я могу щелкнуть строку в представлении данных и заполнить текстовые поля, но когда я редактирую текстовые поля и пытаюсь обновить строку и базу данных, я не получаю никаких полезных результатов, только ошибка при нажатии кнопки удаления (button1) 'Указатель 1 либо отрицательный, либо выше количества строк. ' Ошибка в строке stockBindingSource.RemoveAt(rowIndex);. Пожалуйста, кто-нибудь может увидеть, в чем проблема, и посоветовать мне, как я могу исправить эту проблему? Спасибо

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Configuration;

namespace AMS_POS
{
    public partial class Home : Form
    {
        OleDbCommand cmd;
        int ID = 0;
        public Home()
        {

            InitializeComponent();
        }
        private DataTable DTStock = new DataTable();
        private DataTable DTCust = new DataTable();
        private DataTable DTSuppl = new DataTable();
        private void Home_Load(object sender, EventArgs e)
        {
            DateLbl.Text = DateTime.Now.ToLongDateString();
            TimeLbl.Text = DateTime.Now.ToLongTimeString();
            dataGridView1.DataSource = GetDataStock();
            dataGridView4.DataSource = GetDataCust();
            dataGridView3.DataSource = GetDataSuppl();
            // TODO: This line of code loads data into the 'aMSDataDataSet.Customers' table. You can move, or remove it, as needed.
            this.customersTableAdapter.Fill(this.AMSDataDataSet.Customers);
            // TODO: This line of code loads data into the 'aMSDataDataSet.Suppliers' table. You can move, or remove it, as needed.
            this.suppliersTableAdapter.Fill(this.AMSDataDataSet.Suppliers);

        }
        private DataTable GetDataStock()
        {

            string conns = ConfigurationManager.ConnectionStrings["AMS_POS.Properties.Settings.AMSDataConnectionString"].ConnectionString;
            using (OleDbConnection constr = new OleDbConnection(conns))
            {
                using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM Stock", constr))
                {
                    constr.Open();
                    OleDbDataReader reader = cmd.ExecuteReader();
                    DTStock.Load(reader);
                }
            }
                return DTStock;
        }
        private DataTable GetDataSuppl()
        {

            string connsl = ConfigurationManager.ConnectionStrings["AMS_POS.Properties.Settings.AMSDataConnectionString"].ConnectionString;
            using (OleDbConnection constra = new OleDbConnection(connsl))
            {
                using (OleDbCommand cmda = new OleDbCommand("SELECT * FROM Suppliers", constra))
                {
                    constra.Open();
                    OleDbDataReader reader = cmda.ExecuteReader();
                    DTSuppl.Load(reader);
                }
            }
            return DTSuppl;
        }
        private DataTable GetDataCust()
        {

            string connc = ConfigurationManager.ConnectionStrings["AMS_POS.Properties.Settings.AMSDataConnectionString"].ConnectionString;
            using (OleDbConnection constrb = new OleDbConnection(connc))
            {
                using (OleDbCommand cmdb = new OleDbCommand("SELECT * FROM Customers", constrb))
                {
                    constrb.Open();
                    OleDbDataReader reader = cmdb.ExecuteReader();
                    DTCust.Load(reader);
                }
            }
            return DTCust;
        }
        private void textBox31_TextChanged(object sender, EventArgs e)
        {
            DataView dvStock = DTStock.DefaultView;
            dvStock.RowFilter = "Part + Description LIKE '%" + textBox31.Text + "%'";
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                DataGridViewRow row = dataGridView1.Rows[e.RowIndex];

                textBox1.Text = row.Cells["Part"].Value.ToString();
                textBox2.Text = row.Cells["Description"].Value.ToString();
                textBox3.Text = row.Cells["Year"].Value.ToString();
                textBox8.Text = row.Cells["Application"].Value.ToString();
                textBox9.Text = row.Cells["Engine #"].Value.ToString();
                textBox4.Text = row.Cells["Alt1"].Value.ToString();
                textBox5.Text = row.Cells["Alt2"].Value.ToString();
                textBox6.Text = row.Cells["Alt3"].Value.ToString();
                textBox7.Text = row.Cells["Alt4"].Value.ToString();
                textBox10.Text = row.Cells["Department"].Value.ToString();
                textBox11.Text = row.Cells["Cost"].Value.ToString();
                textBox12.Text = row.Cells["Cost Incl"].Value.ToString();
                textBox13.Text = row.Cells["Markup %"].Value.ToString();
                textBox14.Text = row.Cells["Qty Stock"].Value.ToString();
                textBox15.Text = row.Cells["Rtl Price Excl"].Value.ToString();
                textBox16.Text = row.Cells["Rtl Price Incl"].Value.ToString();
                textBox17.Text = row.Cells["SUPPLIER"].Value.ToString();
                comboBox1.Text = row.Cells["Discount"].Value.ToString();
                textBox19.Text = row.Cells["Green"].Value.ToString();
                textBox20.Text = row.Cells["Red"].Value.ToString();
                textBox21.Text = row.Cells["Yellow"].Value.ToString();
                textBox22.Text = row.Cells["Blue"].Value.ToString();


            }
        }



        private void button2_Click(object sender, EventArgs e)
        {
            StockView.Rows.Add(StockView.SelectedRows[0].Index);
        stockTableAdapter.Update(AMSDataDataSet.Stock);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Are you SURE you want to delete this item?", "Warning", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
        {
            if (StockView.SelectedCells != null)
            {
                StockView.Rows.RemoveAt(StockView.SelectedRows[0].Index);
                stockTableAdapter.Update(AMSDataDataSet.Stock);
            }
        }
        }
    }
}

1 Ответ

0 голосов
/ 07 апреля 2020

Является ли эта область, которая помечает ошибку?

if (StockView.SelectedCells != null)
{
   StockView.Rows.RemoveAt(StockView.SelectedRows[0].Index);
   stockTableAdapter.Update(AMSDataDataSet.Stock);
}

Я подозреваю, что StockView.SelectedRows может быть нулевым, так как вы используете StockView.SelectedCells в вашей охранной логике c.

...