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

时间:2014-04-02 07:47:27

标签: c# asp.net gridview data-binding

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

<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);

2 个答案:

答案 0 :(得分:1)

数据源中分配的对象在 PostBack 中不可用,即在gvItems_RowCommand中,尽管您可以获取ItemType该对象用于为{{生成html 1}}并且在回发中不可用,它与回发中不可用的GridView相同,分配给数据绑定控件的DataSource。

答案 1 :(得分:0)

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

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