rayver bautista Ответов: 1

Как справиться с тем, чтобы индекс оказался вне зоны действия?


Каждый раз, когда я нажимал на название заголовка, этот индекс выходил за пределы диапазона. Я все еще новичок

Что я уже пробовал:

try
            {
                string colNamee = dataGridView2.Columns[e.RowIndex].Name;
                if (colNamee == "Edit")
                {
                    FrmAddProduct frmadd = new FrmAddProduct(this);
                    frmadd.btnSave.Enabled = false;
                    frmadd.btnUpdate.Enabled = true;
                    frmadd.txtID.Text = dataGridView2.Rows[e.RowIndex].Cells[0].Value.ToString();
                    frmadd.txtDescriprion.Text = dataGridView2.Rows[e.RowIndex].Cells[1].Value.ToString();
                    frmadd.txtPrice.Text = dataGridView2.Rows[e.RowIndex].Cells[4].Value.ToString();
                    frmadd.txtQty.Text = dataGridView2.Rows[e.RowIndex].Cells[5].Value.ToString();
                    frmadd.cboBrand.Text = dataGridView2.Rows[e.RowIndex].Cells[2].Value.ToString();
                    frmadd.cboCategory.Text = dataGridView2.Rows[e.RowIndex].Cells[3].Value.ToString();
                    frmadd.ShowDialog();
                    RefreshProduct();
                }
                else if (colNamee == "Delete")
                {
                    if (MessageBox.Show("Are you sure you want to delete this product record?", "Delete Record", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        con.Open();
                        cmd = new MySqlCommand("Delete from tblProduct where Pcode ='" + dataGridView2.Rows[e.RowIndex].Cells[0].Value.ToString() + "'", con);
                        cmd.ExecuteNonQuery();
                        con.Close();
                        RefreshProduct();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

		    
                    

Maciej Los

Отладьте программу, чтобы узнать, какое значение передается e.RowIndex при нажатии на заголовок столбца ;)

F-ES Sitecore

В вашем коде есть около 20 строк, которые могут вызвать эту ошибку. Когда у вас есть ошибка, всегда говорите, на какой линии она происходит.

Richard Deeming

cmd = new MySqlCommand("Delete from tblProduct where Pcode ='" + dataGridView2.Rows[e.RowIndex].Cells[0].Value.ToString() + "'", con);

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

1 Ответов

Рейтинг:
7

Maciej Los

Попробовать это:

DataGridViewRow currentRow = dataGridView2.Rows[e.RowIndex];
if(currentRow==null) return;

//your code here...


или
if(e.RowIndex==-1) return;

//your code here...


rayver bautista

мараминг Саламат по Гумана на по сия, Ди Ко По макакалимутан ПАГ тулонг Ньо Сакин. Саламат по