C# 在gridview中选择一行,然后将所选行传递给另一页

C# 在gridview中选择一行,然后将所选行传递给另一页,c#,asp.net,sql-server,row,aspxgridview,C#,Asp.net,Sql Server,Row,Aspxgridview,我正在用C和SQL Server在ASP.NET中编写一个web应用程序 基本上,我希望能够在GridView中选择一个特定的行,并将主键从该行传递到另一个包含一系列文本框和标签的页面,我希望使用所选行的数据填充这些页面 我这样做的主要原因是因为我的表中有很多字段,我需要在GridView中展开字段进行编辑等 我对ASP.NET中的select语句进行了一些研究,但我不知道如何将该信息传递到另一个页面。一种方法: 首先,在gridview中,在datakeys中添加主键 DataKeyNames

我正在用C和SQL Server在ASP.NET中编写一个web应用程序

基本上,我希望能够在GridView中选择一个特定的行,并将主键从该行传递到另一个包含一系列文本框和标签的页面,我希望使用所选行的数据填充这些页面

我这样做的主要原因是因为我的表中有很多字段,我需要在GridView中展开字段进行编辑等

我对ASP.NET中的select语句进行了一些研究,但我不知道如何将该信息传递到另一个页面。

一种方法:

首先,在gridview中,在datakeys中添加主键

DataKeyNames="Id"
并为选择添加一个事件

OnSelectedIndexChanging="OnRowSelected"
然后在代码隐藏中:

protected void OnRowSelected(object sender, GridViewSelectEventArgs e)
{
    // Get the datakey of the selected row
    var id = Convert.ToInt32(grdCompany.DataKeys[e.NewSelectedIndex].Value);
    // Redirect to second page
    Response.Redirect("SecondPage.aspx?Id=" + id);
}
然后在SecondPage.aspx中,您可以通过以下方式从所选行获取id:

var id = Request.QueryString["Id"];
一种方法是:

首先,在gridview中,在datakeys中添加主键

DataKeyNames="Id"
并为选择添加一个事件

OnSelectedIndexChanging="OnRowSelected"
然后在代码隐藏中:

protected void OnRowSelected(object sender, GridViewSelectEventArgs e)
{
    // Get the datakey of the selected row
    var id = Convert.ToInt32(grdCompany.DataKeys[e.NewSelectedIndex].Value);
    // Redirect to second page
    Response.Redirect("SecondPage.aspx?Id=" + id);
}
然后在SecondPage.aspx中,您可以通过以下方式从所选行获取id:

var id = Request.QueryString["Id"];

我会使用会话。我想你有一些变量

var currentGridViewRow = GridView.SelectedRow;
您可以在会话中插入有关此行的信息:

Session["currentGridViewRow"] = currentGridViewRow;
之后,在后面的第二个代码中,您将从会话中获得信息

var currentGridViewRow = Session["currentGridViewRow"];
请记住,这是一种非常简单和通用的方法。编写一些类来管理会话是一个很好的实践


有用链接:

我会使用会话。我想你有一些变量

var currentGridViewRow = GridView.SelectedRow;
您可以在会话中插入有关此行的信息:

Session["currentGridViewRow"] = currentGridViewRow;
之后,在后面的第二个代码中,您将从会话中获得信息

var currentGridViewRow = Session["currentGridViewRow"];
请记住,这是一种非常简单和通用的方法。编写一些类来管理会话是一个很好的实践


有用链接:

如果您不使用DataKeyName,这里有另一种方法

int RowIndex;
protected void gvName_SelectedIndexChanged(object sender, EventArgs e)
{
    GridViewRow row = gvName.SelectedRow;
    string name = gvName.Rows[RowIndex].Cells[1].Text; //Gets column

    //With DataKey
    string name = gvName.DataKeys[RowIndex]["TicketId"].ToString();

    Response.Redirect("~/secondpage.aspx?ServiceCenter=" + name);
}
protected void gvName_RowCommand(object sender, GridViewCommandEventArgs e)
{
    //Gets Gridview row number when clicked
    RowIndex = Convert.ToInt32(e.CommandArgument);
}

如果不使用DataKeyName,还有另一种方法

int RowIndex;
protected void gvName_SelectedIndexChanged(object sender, EventArgs e)
{
    GridViewRow row = gvName.SelectedRow;
    string name = gvName.Rows[RowIndex].Cells[1].Text; //Gets column

    //With DataKey
    string name = gvName.DataKeys[RowIndex]["TicketId"].ToString();

    Response.Redirect("~/secondpage.aspx?ServiceCenter=" + name);
}
protected void gvName_RowCommand(object sender, GridViewCommandEventArgs e)
{
    //Gets Gridview row number when clicked
    RowIndex = Convert.ToInt32(e.CommandArgument);
}

另一种很好的方式,非常感谢您的解决方案另一种很好的方式,非常感谢您的解决方案感谢快速回复人员,感谢它感谢快速回复人员,感谢itHello Ben,有可能带着从第二页选择的记录来到第一页吗?Hello@Vinay,是的,这是可能的。只需将正确的键传递到查询字符串。你好,本,是否可以使用第二页中选定的记录进入第一页?你好@Vinay,是的,这是可能的。这只是将正确的键传递给查询字符串的问题。