English 中文(简体)
网格视图行到对象类型
原标题:
  • 时间:2008-09-24 13:19:12
  •  标签:

在ASP.NET中,如果我用一个对象数组数据绑定一个网格视图,比如说,当用户选择行时,我如何检索和使用foo(索引)?

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
最佳回答

如果可以确保数据源中项目的顺序没有更改,则可以使用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的Rows集合中进行搜索,通过获取控制值一次获取一列的值,但除非迫不得已,否则不建议这样做。

希望这能有所帮助。

问题回答

理论上,行的索引应该是foo的索引(头行可能是+1,您需要测试)。所以,你应该能够沿着这些路线做一些事情

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

另一种选择是找到一种方法,将索引数据绑定到按钮的commandArgument属性。

可能有一种更干净的方法,但您可以将行的CommandArgument属性设置为其索引。然后像foo(CInt(e.CommandArgument))这样的东西就可以了。





相关问题
热门标签