繁体   English   中英

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

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

当我单击更新按钮时,出现此错误,我的更新单击事件

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

当idx值达到19时,它工作正常..当它大于19时,出现此错误。

更新按钮.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;
    }


}

无需使用e.CommandArgument查找GridViewRow 做这个

GridViewRow gr = ((Button)sender).NamingContainer as GridViewRow;

您有几行?

尝试这个:

int idx = Convert.ToInt32(e.CommandArgument);

if (idx < gvResTasks.Rows.Count)
{
    GridViewRow gr = gvResTasks.Rows[idx];
}

另外,您可以提供btnUpdate ASPX代码吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM