2013-02-12 2 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(); 

, когда я пытаюсь изменить привязку данных. Ошибка говорит, что определения для службы не найдено.

Могу ли я сделать это как-то через:

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

Любая помощь будет хорошо спасибо.

+0

Был ли ваш предыдущий запрос открытым, 'User's? –

+0

Да, gridview работает нормально, и когда я выбираю строку для редактирования, я получаю код ошибки 'DataBinding:' <> f__AnonymousType9'5 [[System.Int32, не содержит свойства с именем «ServiceArea». 'Code' – StudentRik

ответ

0

Если вы хотите редактировать данные в gridview, вы не можете использовать анонимные типы, потому что они неизменяемы. Когда вы отправили простой User s в gridview, вы можете изменить данные, но теперь вы не можете. Вам нужно будет создать класс (назовите его DTO или модель просмотра) для хранения данных, отображаемых в gridview, чтобы вы могли их редактировать.

Это означает, что вы также должны будете внести измененные результаты обратно исходным пользователям при внесении изменений.

+0

Я потерял ваш ответ. Но все это работало нормально, пока я не решил включить u.tbl_ServiceArea.ServiceArea, это единственная проблема. Если я включаю ddl в представление сетки, которое заполняется, когда сетка открывается и использует выбранное значение.? лучшая идея? – StudentRik

+0

OK, вы, вероятно, должны выбрать одно свойство ServiceArea (например, 'u.tbl_ServiceArea.ServiceArea.code'), потому что ServiceArea - это объект, а не примитивное значение. Тем не менее, вы не можете использовать анонимный тип, если хотите, чтобы данные были доступны для редактирования. –