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);
在数据源中分配的对象在回发中不可用,即在gvItems_RowCommand
中,尽管您可以获取ItemType
该对象用于生成GridView
的 html,在回发中不可用,这与分配给数据绑定控件的数据源的回发中DataSet
不可用的方式相同。
无法获取对绑定到网格视图的特定行的对象的引用。主要是因为 asp.net 的无国籍性质。一旦响应被呈现给客户端,数据就会在服务器本身上消失 - 即在页面生命周期结束时。
但是,如果您仍希望保留数据,并且不必从数据库查询每个回发的数据,则可以序列化对象列表并将其存储在视图状态中。这取决于情况是好/坏。如果数据很小,那么你可以这样做。如果很大,那么您每次都必须查询它。单独执行此操作不会检索与行关联的对象:您必须迭代该列表并找到与该行关联的对象。