C# 索引超出范围。必须为非负数且小于集合的大小。参数名称:索引

C# 索引超出范围。必须为非负数且小于集合的大小。参数名称:索引,c#,C#,在C#中从visual studio更新MySql DataGridView时遇到了一个小问题。下面的代码包含fillData();方法填充数据网格。异常错误在按钮代码中抛出。该按钮的目的是将“已审阅”字段从0替换为1,这意味着将选中“已审阅”复选框。这可能是一个非常基本的问题,所以我可能会问更多的问题,希望你能帮忙 public DataTable tb = new DataTable(); public MySqlDataAdapter a = new MySqlDataAdapter();

在C#中从visual studio更新MySql DataGridView时遇到了一个小问题。下面的代码包含fillData();方法填充数据网格。异常错误在按钮代码中抛出。该按钮的目的是将“已审阅”字段从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());
        }
    }
}

我猜你的问题在这里:

.SelectedRows[0]
运行此代码时,能否验证
.SelectedRows
属性的
计数是否为1或更多

作为旁注,以下表达式:

dataGridView2.Rows[this.dataGridView2.SelectedRows[0].Index]
。。。看起来不必要的复杂。你能换成这个吗

this.dataGridView2.SelectedRows[0]

我猜你的问题在这里:

.SelectedRows[0]
运行此代码时,能否验证
.SelectedRows
属性的
计数是否为1或更多

作为旁注,以下表达式:

dataGridView2.Rows[this.dataGridView2.SelectedRows[0].Index]
。。。看起来不必要的复杂。你能换成这个吗

this.dataGridView2.SelectedRows[0]

通过检查以下内容,您可以找到问题:

  • 有多少个条目
    this.datagridview 2.SelectedRows
  • 这个.dataGridView2.Rows中有多少个条目
  • this.dataGridView2.SelectedRows[0]。Index的值是多少

索引值大于其中一个集合中的有效条目数。

通过检查以下内容,可以找到问题:

  • 有多少个条目
    this.datagridview 2.SelectedRows
  • 这个.dataGridView2.Rows中有多少个条目
  • this.dataGridView2.SelectedRows[0]。Index的值是多少

索引值大于其中一个集合中的有效条目数。

您的问题在于这一行:

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

您试图在没有记录的地方插入记录。解决此问题的解决方法是,首先尝试在行中插入一些虚拟数据,然后用实际数据覆盖它。

您的问题在于这一行:

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

您试图在没有记录的地方插入记录。解决这一问题的解决方法是先尝试在行中插入一些虚拟数据,然后用实际数据覆盖它。

我在gridview中处理按钮事件时遇到了这种问题。。我的解决方案是:


我在gridview中处理按钮事件时遇到了这种问题。。我的解决方案是:


@乔·贝尔:好吧,给你。编写你的代码,使它不会做任何事情,除非选择了rows.Count>0,那么你就可以开始了。@Joe Bell:好吧,你已经有了它。编写代码时,除非选择了rows.Count>0,否则它不会执行任何操作,您应该可以开始了。对于
fillData()
,您没有足够的结束花括号。对于
fillData()
,您没有足够的结束花括号。谢谢,我甚至没有选择任何行!!this.dataGridView2.SelectionMode=DataGridViewSelectionMode.FullRowSelect;谢谢,我甚至没有选择任何行!!this.dataGridView2.SelectionMode=DataGridViewSelectionMode.FullRowSelect;