2013-02-12 44 views
0

我想在gridview中做一个更新,所有工作都很好,直到我包含来自另一个表的'serviceArea'。从两个表Gridview编辑

这是我的查询。

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> 

任何帮助将是一件好事谢谢。

+0

您的上一个查询是否返回纯粹'User's? – 2013-02-12 19:01:15

+0

是的,gridview工作正常,当我选择一行来编辑我得到的错误'code'DataBinding:'<> f__AnonymousType9'5 [[System.Int32,不包含属性名称'ServiceArea'。'code' – StudentRik 2013-02-13 09:09:24

回答

0

如果你想在gridview中编辑数据,你不能使用匿名类型,因为它们是不可变的。当你发送普通User到gridview你可以修改数据,但现在你不能。您必须创建一个类(称之为DTO或查看模型)来保存您在gridview中显示的数据,以便编辑它们。

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

+0

我迷失了你的答案。但它一切正常,直到我决定包含u.tbl_ServiceArea.ServiceArea,这是唯一的问题。如果我在网格视图中包含ddl,该网格视图会在网格打开并使用选定值时填充。更好的主意? – StudentRik 2013-02-13 09:29:37

+0

好的,你可能应该选择ServiceArea的一个属性(例如'u.tbl_ServiceArea.ServiceArea.code'),因为ServiceArea是一个对象,而不是原始值。但是,如果您希望数据可编辑,则不能使用匿名类型。 – 2013-02-13 09:36:20