参数化使用Gridview向下钻取

时间:2012-01-11 12:12:57

标签: c# asp.net gridview

我正在尝试使用Gridview“select”链接深入查看ASP.NET中使用C#选定行的特定页面。此gridview是在page_load中动态生成的,并且是从一个相当简单的SQL select查询中进行数据绑定的。每行都有一个唯一的id,我希望在单击该行的select按钮时将其作为url中的参数传递。因此,当您单击id值为9的行上的“select”按钮时(注意 - 不是gridview定义的id,而是SQL查询中的id),您将被重定向到诸如moreDetail.aspx之类的地址。 ?ID = 9。

但是,当尝试将id传递给事件处理程序时,我遇到了问题... GridView.SelectedIndexChanging采用通常的(对象发送者,EventArgs e)作为参数而没有别的,因为Gridview是在Page_Load创建的EventArgs类没用。我似乎无法找到任何方法将我之前检索到的id传递给事件处理程序。

经过大量搜索后,我尝试创建一个扩展EventArgs的类(显然添加了我的额外参数),但似乎使用除(object sender,EventArgs e)之外的任何参数都不起作用。理论上我可以在事件处理程序中重做SQL查询,但这对我来说似乎是一种可靠的方法来实现我正在寻找的东西,所以我希望有人能够看到我在这里遇到的错误,因为我我确定我错过了一些明显的东西。

一些代码 - grid.SelectedRow.Cells [0]将包含我想传递的参数:

在Page_Load中:

GridView grid = new GridView();  
grid.DataSource = source;  
CommandField selectField = new CommandField();  
selectField.ShowSelectButton = true;  
selectField.SelectText = "View Jobs";  
grid.Columns.Add(selectField);  
grid.SelectedIndexChanging += grid_SelectedIndexChanging;  
grid.DataBind();  
content.Controls.Add(grid);  

事件处理程序:

    protected void grid_SelectedIndexChanging(object sender, EventArgs e)
    {
        Response.Redirect("ViewCustomer.aspx?id=" + grid.SelectedRow.Cells[0]);
    }

显然这不起作用,因为网格的范围没有扩展到处理程序......但是 我可以如何访问该数据?

1 个答案:

答案 0 :(得分:1)

您需要将发送者强制转换为GridView以引用您的调用GridView:

protected void grid_SelectedIndexChanging(object sender, EventArgs e) 
{ 
    GridView grid = (GridView)sender;
    Response.Redirect("ViewCustomer.aspx?id=" + grid.SelectedRow.Cells[0]); 
}