我有一个从本地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");
}
有什么建议吗?
由于
答案 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");
}
}