【问题标题】:ItemType Get Object of Selected Row on RowCommandItemType 获取 RowCommand 上选定行的对象
【发布时间】:2014-04-02 07:47:27
【问题描述】:

随着用于强类型数据绑定的 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);

【问题讨论】:

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


    【解决方案1】:

    datasource 中分配的对象在 PostBackgvItems_RowCommand 中不可用,尽管您可以获取ItemType 该对象用于为GridView 生成html,而不是在回发中可用,这与分配给数据绑定控件的 DataSource 的 回发 中不可用的 DataSet 相同。

    【讨论】:

    • 谢谢大家的解释,他们确实有道理。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-10
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 2011-09-24
      相关资源
      最近更新 更多