【问题标题】:GridView Row to Object TypeGridView 行到对象类型
【发布时间】:2008-09-24 13:19:12
【问题描述】:

在 ASP.NET 中,如果我将 gridview 与对象数组进行数据绑定,可以说,当用户选择行时,我如何检索和使用 foo(index)?

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

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    如果您可以确定数据源中项目的顺序没有改变,您可以使用 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 集合中进行探索,通过获取控件值一次获取一列的值,但除非必须这样做,否则不建议这样做。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      理论上行的索引,应该是 foo 的索引(可能为标题行 +1,你需要测试)。所以,你应该能够按照这些思路做一些事情

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-01
          • 2018-11-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多