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

时间:2013-06-19 11:18:12

标签: c# asp.net sql-server row aspxgridview

我正在使用C#和SQL Server在ASP.NET中编写Web应用程序。

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

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

我已经对ASP.NET中的select语句进行了一些研究,但我无法弄清楚如何将该信息传递给另一个页面。

3 个答案:

答案 0 :(得分:7)

一种方法:

首先,在gridview中,在数据键中添加主键

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"];

答案 1 :(得分:2)

如果您不使用DataKeyNames,这是另一种方法。

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);
}

答案 2 :(得分:1)

我会使用Session。所以我想你有一些变量

var currentGridViewRow = GridView.SelectedRow;

您可以向会话插入有关此行的信息:

Session["currentGridViewRow"] = currentGridViewRow;

在您的第二个代码中,您将从会话中获取信息。

var currentGridViewRow = Session["currentGridViewRow"];

请记住,这是非常简单和一般的方法。编写一些可以管理会话的课程是一种很好的做法。

有用的链接:http://msdn.microsoft.com/en-us/library/ms178581%28v=vs.100%29.aspx