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

C# 错误::索引超出范围。必须为非负数且小于集合的大小。参数名称:索引,c#,asp.net,gridview,C#,Asp.net,Gridview,可能重复: 当我点击更新按钮时,我得到了这个错误 我的更新点击事件 protected void btnUpdate_Click(object sender, CommandEventArgs e) { int idx = Convert.ToInt32(e.CommandArgument); GridViewRow gr = gvResTasks.Rows[idx]; 当idx值达到19时,工作正常。当大于19时,会发生此错误 Updatebutton.aspx <I

可能重复:

当我点击更新按钮时,我得到了这个错误 我的更新点击事件

protected void btnUpdate_Click(object sender, CommandEventArgs e)
{
    int idx = Convert.ToInt32(e.CommandArgument);
    GridViewRow gr = gvResTasks.Rows[idx];
idx
值达到19时,工作正常。当大于19时,会发生此错误

Updatebutton.aspx

<ItemTemplate> 
  <asp:Button runat="server" ID="btnUpdate" Text="Update" OnCommand="btnUpdate_Click" CommandArgument="<%# Container.DataItemIndex %>" /> 
  <%--<asp:Button runat="server" ID="Button1" Text="Update" onclick="btnUpdate_Click" />--%> 
</ItemTemplate>                                

updatebutton.aspx.cs

protected void btnUpdate_Click(object sender, CommandEventArgs e)
{
   // int idx = Convert.ToInt32(e.CommandArgument);
    int idx = Convert.ToInt32(e.CommandArgument);
    GridViewRow gr = gvResTasks.Rows[idx];

    Label hf = (Label)gr.FindControl("hdEmployeeID");

    string sEmpID = hf.Text;
    lblEmployeeID.Text = sEmpID;
    lblEmployeeID2.Text = sEmpID;

    int Rows = gvResTasks.Rows.Count;
    for (int x = 0; x < Rows; x++)
    {
        GridViewRow tr = gvResTasks.Rows[x];
        tr.CssClass = "WhiteBack";
    }

    ClearMessages();

    gr.CssClass = "TealBack";

    string sSubTaskID = gr.Cells[0].Text;
    lblSubTaskID.Text = sSubTaskID;

    lblSubTaskName.Text = @gr.Cells[1].Text;

    LoadSubTaskInfo();

    Single sProgress = 0;
    Boolean bok = Single.TryParse(lblActualProgress.Text, out sProgress);

    DateTime dPF = DateTime.Parse(lblPlannedFinish.Text);

    if (dPF > DateTime.Now)
    {
        btnFinish.Enabled = false;
    }
    else if (dPF <= DateTime.Now)
    {
        if (sProgress >= 100)
        {
            btnFinish.Enabled = false;
        }
        else
        {
            btnFinish.Enabled = true;
        }
        //btnFinish.Enabled = true;
    }

    panelUpdate.CssClass = "float";
    panelUpdate.Visible = false;
    if (gr.Cells[7].Text != "True")
    {
        panelUpdate.Visible = true;
    }
}
protectedvoidbtnupdate\u单击(对象发送方,CommandEventArgs e)
{
//int idx=Convert.ToInt32(e.CommandArgument);
int idx=Convert.ToInt32(e.CommandArgument);
GridViewRow gr=gvrestsks.Rows[idx];
标签hf=(标签)gr.FindControl(“hdEmployeeID”);
字符串sEmpID=hf.Text;
lblEmployeeID.Text=sEmpID;
lblEmployeeID2.Text=sEmpID;
int Rows=gvResTasks.Rows.Count;
对于(int x=0;xDateTime.Now)
{
btnFinish.Enabled=false;
}
否则,如果(dPF=100)
{
btnFinish.Enabled=false;
}
其他的
{
btnFinish.Enabled=true;
}
//btnFinish.Enabled=true;
}
panelUpdate.CssClass=“float”;
panelUpdate.Visible=false;
if(gr.Cells[7].Text!=“True”)
{
panelUpdate.Visible=true;
}
}

您试图从gvResTasks中获取一个值,该值位于gridView中高于行数的位置。因此,索引超出界限的错误

是不是跟你的一样?