C# - Gridview帮助。 (ASP.NET)

时间:2016-03-02 21:56:01

标签: c# asp.net gridview rowcommand

我有一个从本地SQL服务器提取数据的gridview。我选择在gridview上显示3列。我添加了第四列(选择命令)。我想从第一列获取数据,当我单击select命令时,这是一个id,但我总是得到一个错误"类型' System.ArgumentOutOfRangeException'发生在mscorlib.dll但未在用户代码中处理附加信息:索引超出范围。必须是非负数且小于集合的大小。"

基本上我想从第一列获取id,然后将其分配给会话变量,然后重定向到第二页,然后使用该会话变量的内容填充另一个文本框。

    protected void grdClients_RowCommand(object sender, GridViewCommandEventArgs e)
{
      string id = grdClients.Rows[grdClients.SelectedIndex].Cells[0].Text.ToString();
      Session["ID"] = id;
      Response.Redirect("secondPage.aspx");
}

有什么建议吗?

由于

3 个答案:

答案 0 :(得分:0)

1-添加属性到GridView

DataKeyNames="aboutusID"

2-将模板字段添加到列

<asp:TemplateField ShowHeader="False">
    <ItemTemplate>
        <asp:LinkButton ID="LinkButton1" runat="server" CommandName="SelectSession" Text="EDIT"  CommandArgument='<%# DataBinder.Eval(Container,"RowIndex")%>' ></asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>

后面的代码中的

3-

protected void GridViewAbout_RowCommand(object sender, GridViewCommandEventArgs e)
{
    // this to skip on paging or sorting command
    if (e.CommandName != "Sort" & e.CommandName != "Page")
    {
        // Get the command argument where the index of the clicked button is stored
        int index = Convert.ToInt32(e.CommandArgument);
        // Get the data key of the index where the id is stored
        int id = Convert.ToInt32(GridViewAbout.DataKeys[index].Value);
        if (e.CommandName == "SelectSession")
        {
            // Your Code
        }
    }
}

答案 1 :(得分:0)

我认为您应该使用SelectedIndexChanged事件。
然后将GridviewRow属性分配给选定的行“GridViewRow row = grdClients.SelectedRow;”

之后,您可以使用row获取第一个单元格的值,并将其分配给您的会话或您想要的位置。 “row.Cells [0]。文本;”

    protected void grdClients_SelectedIndexChanged(object sender, EventArgs e)
    {
        GridViewRow row = grdClients.SelectedRow;
        string id = row.Cells[0].Text;
        Session["ID"] = id;
        Response.Redirect("secondPage.aspx");
    }

答案 2 :(得分:0)

谢谢大家, 通过从您提供的每个解决方案中获取部分,我能够提出解决方案。非常感谢。

以下是我的解决方案:

 protected void grdClients_RowCommand(object sender, GridViewCommandEventArgs e)
 {

            if (e.CommandName == "Select")
            {

                int index = Convert.ToInt32(e.CommandArgument);
                string id = grdClients.Rows[index].Cells[0].Text.ToString();
                Session["ID"] = id;
                Response.Redirect("secondForm.aspx");
            }
}