Индекс ошибки строк DataGridView выходит за пределы допустимого диапазона С#

Я работаю над С# WinForms, где у меня есть несколько флажков, текст которых добавляется в datagridview (dgData) при нажатии кнопки. Вот его код.

private void btnAdd_Click(object sender, EventArgs e)
    {
        dgData.Rows.Clear();
        foreach(Control c in pnlDeficiency.Controls)
        {
            if ((c is CheckBox) && ((CheckBox)c).Checked)
            dgData.Rows.Add(c.Text);
        }
    }

И мой код сохранения здесь.

private void btnSave_Click(object sender, EventArgs e)
    {
        if (MessageBox.Show("Are You Sure You Want to Save the Record!", "TAC | Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
        {
            SqlConnection S_Conn = new SqlConnection(strConnString);
            S_Conn.Open();
            int a = 10;
            for (int i = 0; i <= dgData.Rows.Count; i++)
            {
                string Query_Insert = "";
                Query_Insert = "INSERT into Deficiency_Details (Vendor_Id, Tender_Id, DeficiencyType) values ('" + cmbSelectVendor.SelectedValue + "', '" + cmbSelectTender.SelectedValue + "', '" + dgData.Rows[i].Cells[0].Value.ToString() + "')";
                SqlCommand Command_Insert = new SqlCommand(Query_Insert, S_Conn);
                a = Command_Insert.ExecuteNonQuery();
            }
            if (a == 0)
            {
                MessageBox.Show("Record Not Saved Successfully! Please Check Fields", "TAC | Alert", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show("Record Saved Successfully", "TAC | Success", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
            S_Conn.Close();
            S_Conn.Dispose();
            ResetAll();
        }
    }

Я получаю сообщение об ошибке: Index out of range. Я отладил свою программу, и ошибка в этой строке

dgData.Rows[i].Cells[0].Value.ToString()

Где VALUE становится NULL. Я знаю ошибку, и я решал ее много раз, но на этот раз она не решается вообще. пожалуйста, помогите мне.


person adil sharif    schedule 16.11.2016    source источник
comment
Convert.ToString(dgData.Rows[i].Cells[0].Value)   -  person vivek nuna    schedule 16.11.2016
comment
@viveknuna не работает   -  person adil sharif    schedule 16.11.2016


Ответы (2)


Проблема в этой строке:

for (int i = 0; i <= dgData.Rows.Count; i++)

Вам нужно изменить его на это:

for (int i = 0; i < dgData.Rows.Count; i++)

Потому что, допустим, у вас есть 10 строк в GridView. dgData.Rows.Count будет равен 10. Теперь вы запускаете от 0 до 10 из-за вашего оператора ‹=. 0-10 будет 11 циклов. Ваш GridView содержит только 10 строк. Таким образом, индекс выходит за пределы допустимого диапазона на последней итерации цикла. Если вы измените оператор на ‹, ваш цикл будет работать от 0 до 9, что составляет ровно 10 итераций.

person Sebi    schedule 16.11.2016

Используйте следующий код, где вы можете указать индекс ячейки, которую вам нужно вставить в

DataGridViewRow row = (DataGridViewRow)dgData.Rows[0].Clone();
row.Cells[0].Value = c.text;
dbData.Rows.Add(row);
person user7145771    schedule 16.11.2016