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