2008-09-24 70 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))这样的伎俩。