我有一个 GridView,我从 SQL 数据库将一个 DataSource 绑定到它,网格中有一个带有复选框的列,因此我可以在其中“选择”一些项目(实际上是行)。我想要在这里对每个选定行中的项目进行一些更新,但是经过一些搜索后,我找不到如何访问行中的项目,虽然 DataItem 可以工作,但它给了我一个 Null。
编辑:简而言之,我有一个从数据源构建的 GridView,所以基本上,每一行代表一个对象,当我在其中一行中选中一个复选框时,我希望能够获取与那行,实现这一目标的最简单方法是什么?
Page_Load 上的数据绑定:
if (!Page.IsPostBack) { gvUnusedAccessories.DataSource = currentContext.Items.OfType<Accessory>().Where(ac => ac.Item_Parent_Id == ((PhoneLine)currentItem).Parent.Item_Id); gvUnusedAccessories.AutoGenerateColumns = false; gvUnusedAccessories.DataBind(); }
当我按下更新按钮时的事件,它实际上浏览了行,如果该行有一个复选框,它将进行更新:
protected void btnAddToMobile_Click(object sender, EventArgs e) { foreach (GridViewRow row in gvUnusedAccessories.Rows) { if(((CheckBox)row.FindControl("chkSelect")).Checked) { ((Accessory)row.DataItem).PhoneLine_Id = currentItem.Item_Id; } } }
这是我在 .aspx 中的 GridView :
<asp:GridView ID="gvUnusedAccessories" runat="server">
<Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:TemplateField HeaderText="Select">
<ItemTemplate >
<asp:CheckBox ID="chkSelect" runat="server" AutoPostBack="True"/>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Item_Id" HeaderText="ID" ReadOnly="True"/>
<asp:BoundField DataField="Item_Name" HeaderText="Name" ReadOnly="True"/>
<asp:BoundField DataField="AccessoryModel" HeaderText="Modèle" ReadOnly="True"/>
<asp:BoundField DataField="AccessoryBrand" HeaderText="Marque" ReadOnly="True"/>
</Columns>
</asp:GridView>
关于如何访问包含在行中的对象的任何提示?我知道我实际上可以获取 ID,然后向我的数据库发出 SQL 请求,但它似乎有点繁重,必须有更好的解决方案。