簡體   English   中英

指數超出范圍。 必須是非負數且小於集合的大小。 參數名稱:索引

[英]Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

剛剛在 C# 中從 Visual Studio 更新 MySql DataGridView 時遇到了一個小問題。 下面的代碼包含 fillData(); 填充數據網格的方法。 按鈕代碼中拋出異常錯誤。 該按鈕的目的是將 Reviewed 字段從 0 替換為 1,這意味着隨后選中了已審核的復選框。 這可能是一個非常基本的問題,所以我可能會提出更多問題,希望您能提供幫助。

public DataTable tb = new DataTable();
public MySqlDataAdapter a = new MySqlDataAdapter();

public void fillData()
{
    using (MySqlConnection c = new MySqlConnection("host="";user="";password=""; database="";"))
    {
        c.Open();                
        string strSQL = "SELECT DataID, Date, WhichMeal, HbA1C_Test, Carbohydrates, GlucoseReading, InsulinUsed, InsulinType, ReviewedBy, Reviewed From PatientData WHERE username = '" + uname.Text + "';";

        using (MySqlDataAdapter a = new MySqlDataAdapter(strSQL, c))
        {
            a.Fill(tb);
            dataGridView2.DataSource = tb;
        }


private void button5_Click(object sender, EventArgs e)
{
    using (MySqlConnection c = new MySqlConnection("host=;user=;password= ""; database=""))
    {
        try
        {
            string DataId =  dataGridView2.Rows[this.dataGridView2.SelectedRows[0].Index].Cells["DataID"].Value.ToString();
            string Update = string.Format("UPDATE PatientData SET Reviewed = 1 WHERE DataID = {0}", DataId);
            MySqlCommand command = new MySqlCommand(Update, c);

            c.Open();
            command.ExecuteNonQuery();
            c.Close();
            tb.Clear();
            fillData();
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
}

您的問題在於這一行:

string DataId =  dataGridView2.Rows[this.dataGridView2.SelectedRows[0].Index].Cells["DataID"].Value.ToString();

您正在嘗試在沒有記錄的地方插入記錄。 解決此問題的解決方法是先嘗試在行中插入一些虛擬數據,然后用實際數據覆蓋它。

我猜你的問題在這里:

.SelectedRows[0]

您能否驗證運行此代碼時.SelectedRows屬性的Count是否為 1 或更多?

作為旁注,以下表達式:

dataGridView2.Rows[this.dataGridView2.SelectedRows[0].Index]

...似乎不必要地復雜。 可以用這個代替嗎?

this.dataGridView2.SelectedRows[0]

通過檢查以下事項,您可以找到問題:

  • this.dataGridView2.SelectedRows中有多少條目?
  • this.dataGridView2.Rows中有多少條目?
  • this.dataGridView2.SelectedRows[0].Index的值是多少?

索引值大於這些集合之一中的有效條目數。

我在處理 gridview 中的按鈕事件時遇到了這種問題。我對此的解決方案是:

 if (e.ColumnIndex == 0 && e.RowIndex >=0) { //condition here }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM