【问题标题】:Gridview edit from two tables来自两个表的 Gridview 编辑
【发布时间】:2013-02-13 17:18:34
【问题描述】:

我正在尝试在 gridview 中进行更新,并且一切正常,直到我包含来自另一个表的“serviceArea”。

这是我的查询。

var result = from u in _db.tbl_Users
             where u.UserName.Contains(searchQuery)
                   && searchQuery.Length > 0
                   && u.Deleted == false
             select new
             {
                 u.UserName,
                 u.Email,
                 u.IsAdmin,
                 u.ServiceAreaId,
                 u.tbl_ServiceArea.ServiceArea,
                 u.UserId,
             };

grd_User.DataSource = result;
grd_User.DataBind();

当我尝试编辑时,数据绑定错误说没有找到 serviceArea 的定义。

我可以通过以下方式做到这一点:

<EditItemTemplate>
      <asp:TextBox ID="txt_Val_ServiceArea" runat="server" Text='<%# Eval("ServiceArea") %>'></asp:TextBox>
 </EditItemTemplate>

任何帮助都会很好,谢谢。

【问题讨论】:

  • 您之前的查询是否返回了普通的Users?
  • 是的,gridview 工作正常,当我选择要编辑的行时,我收到错误 'code'DataBinding: 'f__AnonymousType9`5[[System.Int32, does not contain a property with the name '服务区'.'代码'

标签: asp.net linq-to-sql gridview


【解决方案1】:

如果您想在网格视图中编辑数据,则不能使用匿名类型,因为它们是不可变的。当您将纯 Users 发送到 gridview 时,您可以修改数据,但现在您不能。您必须创建一个类(称为 DTO 或视图模型)来保存您在 gridview 中显示的数据,以便您可以编辑它们。

这意味着您还必须在提交更改时将修改后的结果写回原始用户。

【讨论】:

  • 你的回答让我迷失了。但这一切都很好,直到我决定包含 u.tbl_ServiceArea.ServiceArea,这是唯一的问题。如果我在网格视图中包含一个 ddl,该 ddl 在网格打开时填充并使用选定的值。?更好的主意?
  • 好的,您可能应该选择 ServiceArea 的一个属性(例如 u.tbl_ServiceArea.ServiceArea.code),因为 ServiceArea 是一个对象,而不是原始值。但是,如果您希望数据可编辑,则不能使用匿名类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多