gpt4 book ai didi

c# - 从 GridViewRow ASP.NET 获取项目

转载 作者:太空狗 更新时间:2023-10-29 20:28:16 26 4
gpt4 key购买 nike

我有一个 GridView,我从 SQL 数据库将数据源绑定(bind)到它,网格中有一个带有复选框的列,因此我可以在其中“选择”一些项目(实际上是行)。我在这里想要的是对每个选定行中的项目进行一些更新,但经过一些搜索后我找不到如何访问一行中的项目,我虽然 DataItem 可以工作,但它给了我一个 Null。

编辑:简而言之,我有一个从数据源构建的 GridView,所以基本上,每一行代表一个对象,当我在其中一行中选中一个复选框时,我想要获取与该行相关的对象,最简单的方法是什么?

Page_Load 上的数据绑定(bind):

  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 请求,但它似乎有点繁重,必须有更好的解决方案。

最佳答案

除非您将数据源存储在 ViewState 或 session 中,否则一旦数据绑定(bind)完成,您就会丢失数据源。除非您这样做,否则 DataItem 将始终为 null。因此,我经常发现自己将数据源存储在 View 状态中。当然,这意味着您的页面大小会变大。您所说的另一个选项是使用某种主键重新查询数据源。根据您的需要,我不能说哪个选项更好。我倾向于倾向于查看状态而不是第二次数据库调用,因为这可能是一次昂贵的调用

关于c# - 从 GridViewRow ASP.NET 获取项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11694835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com