2012-01-11 62 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