2008-09-24 71 views
2

在ASP.NET中,如果我使用對象數組綁定gridview可以說,如何在用戶選擇行時檢索和使用foo(索引)?GridView行到對象類型

dim fooArr() as foo; 
gv1.datasource = fooArr; 
gv1.databind(); 

在行選擇

Private Sub gv1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gv1.RowCommand 

     If e.CommandName = "Select" Then 
      'get and use foo(index)  
     End If 
    End Sub 

回答

2

如果您可以確定數據源中項目的順序沒有更改,則可以使用CommandEventArgs的CommandArgument屬性。

但是,更健壯的方法是使用GridView的DataKeys/SelectedDataKey屬性。唯一需要注意的是你的命令必須是「Select」類型的(因此,默認情況下RowCommand不能訪問DataKey)。

假設您在包含您的列表的實體中具有某種唯一性,您可以在GridView的DataKeys屬性中設置一個或多個關鍵屬性名稱。當GridView中的選定項目被設置時,您可以檢索您的鍵值並在綁定列表中找到該項目。這種方法讓你擺脫了讓GridView中的序號位置與數據源中元素的序號位置不匹配的問題。

例子:

<asp:GridView ID="GridView1" runat="server" AutoGenerateSelectButton="True" 
    DataKeyNames="Name" onrowcommand="GridView1_RowCommand1" 
    onselectedindexchanged="GridView1_SelectedIndexChanged"> 
</asp:GridView> 

然後代碼隱藏(或內聯)的頁面會是這樣的:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // Value is the Name property of the selected row's bound object. 
    string foo = GridView1.SelectedDataKey.Value as string; 
} 

另一種選擇是去的行集洞穴探險GridView通過獲取控制值一次獲取列的值,但除非必須,否則不建議這樣做。

希望這會有所幫助。

0

理論上行的索引,應該是foo的指數(也許+1爲標題行,你需要測試)。所以,你應該能夠繼續沿着這條

dim x as object = foo(e.row.selectedIndex) 

另一種方法是找到一種方法來索引數據綁定到按鈕的commandArgument屬性做一些事情。

0

這可能是一個更乾淨的方式,但您可以將該行的CommandArgument屬性設置爲其索引。然後像foo(CInt(e.CommandArgument))這樣的伎倆。