ItemType 在 RowCommand 上获取所选行的对象

本文关键字:对象 获取 RowCommand ItemType | 更新日期: 2023-09-27 17:56:11

随着用于强类型数据绑定的 ItemType 属性的引入,有没有办法从数据绑定 Grid 中获取该对象:

<asp:GridView ID="gvItems" runat="server" ItemType="Item" DataKeyNames="ItemID,ItemGroupID"  OnRowCommand="gvItems_RowCommand">
    <Columns>
        <asp:BoundField DataField="ItemDescription" HeaderText="Item"/>
    </Columns>
</asp:GridView>
protected void gvItems_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Select")
    {
        int selectedIndex = int.Parse(e.CommandArgument.ToString());
        DataKey dk = gvItems.DataKeys[selectedIndex];
        string itemGroupID = dk.Values["ItemGroupID"].ToString();
        **Item item = gvItems.GetSelectedObject(selectedIndex);**
    }
}

传统上,我会使用 DataKey 属性,但我想知道是否有任何方法可以获取对该对象的引用,类似于 Item item = gvItems.GetSelectedObject(selectedIndex);

ItemType 在 RowCommand 上获取所选行的对象

在数据源中分配的对象在回发中不可用,即在gvItems_RowCommand中,尽管您可以获取ItemType 该对象用于生成GridView的 html,在回发中不可用,这与分配给数据绑定控件的数据源的回发DataSet不可用的方式相同。

无法获取对绑定到网格视图的特定行的对象的引用。主要是因为 asp.net 的无国籍性质。一旦响应被呈现给客户端,数据就会在服务器本身上消失 - 即在页面生命周期结束时。

但是,如果您仍希望保留数据,并且不必从数据库查询每个回发的数据,则可以序列化对象列表并将其存储在视图状态中。这取决于情况是好/坏。如果数据很小,那么你可以这样做。如果很大,那么您每次都必须查询它。单独执行此操作不会检索与行关联的对象:您必须迭代该列表并找到与该行关联的对象。