2012-01-11 59 views
2

我试图让Gridview的“选择”链接钻取到C#ASP.NET中选定行的特定页面。这个gridview是在page_load中动态生成的,并且是一个相当简单的SQL select查询的数据绑定。每行都有一个唯一的ID,并且我希望在点击该行的选择按钮时将其作为参数传递给URL。所以,当你点击id值为9的行上的“select”按钮(注意 - 不是gridview定义的id,而是来自SQL查询的id),你被重定向到一个地址,比如moreDetail.aspx ?ID = 9。参数化向下钻取Gridview

但是,当试图将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

你需要投发件人GridView中引用您的通话GridView控件:

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

这是伟大的,我知道必须有一个简单的方法,我只是不能在任何地方找到它。 非常感谢您的帮助。 – Hecksa 2012-01-11 12:52:25