2010-07-24 1 views
2

Здравствуйте,Проблема с обновлением результатов LINQ с анонимным типом ... только для чтения?

Я изучаю LINQ и столкнулся с проблемой. Я создал простой запрос против db northwind, и я формирую поля, которые должны быть возвращены. Проблема заключается в том, что после запуска я не могу изменить какие-либо поля в моем AspxGridView.

<dxwgv:ASPxGridView ID="ASPxGridView1" runat="server" 
    AutoGenerateColumns="False" KeyFieldName="CategoryID"> 
    <Columns> 
     <dxwgv:GridViewCommandColumn VisibleIndex="0"> 
      <EditButton Visible="True"> 
      </EditButton> 
      <NewButton Visible="True"> 
      </NewButton> 
      <DeleteButton Visible="True"> 
      </DeleteButton> 
     </dxwgv:GridViewCommandColumn> 
     <dxwgv:GridViewDataTextColumn Caption="CategoryID" FieldName="CategoryID" 
      VisibleIndex="1"> 
     </dxwgv:GridViewDataTextColumn> 
     <dxwgv:GridViewDataTextColumn Caption="CategoryName" FieldName="CategoryName" 
      VisibleIndex="2"> 
     </dxwgv:GridViewDataTextColumn> 
     <dxwgv:GridViewDataTextColumn Caption="Description" FieldName="Description" 
      VisibleIndex="3"> 
     </dxwgv:GridViewDataTextColumn> 
    </Columns> 
</dxwgv:ASPxGridView> 

C# Синтаксис:

protected void Page_Load(object sender, EventArgs e) 
{ 
    NorthwindDataContext db = new NorthwindDataContext(); 
    var r = db.Categories 
     .Select(p=>new {p.CategoryID,p.CategoryName,p.Description}); 
    ASPxGridView1.DataSource = r; 
    ASPxGridView1.DataBind(); 
} 

Вы, ребята, можете сказать, что это проблема для вар анонимного типа .Но я всегда нужно использовать анонимный type.How решить эту проблему

+1

Вы не можете изменить поля, как? Какой код вы используете, чтобы попытаться изменить поля? Какую ошибку вы получаете? – Gabe

+0

В примере, который вы предоставили, я вижу назначение 'var r', но где' lresult' создается/заполняется? Кроме того, я не понимаю, что вы подразумеваете под «Мне всегда нужно использовать анонимный тип». Вы должны использовать все, что поддерживает 'IEnumerable' для вашего источника данных. Кроме того, наличие такого кода, голого в «Page_Load» без проверки «IsPostback», может быть вероятной проблемой, так как данные сетки будут восстановлены и восстановлены при каждой обратной передаче, что делает редактирование практически невозможным. –

+0

извините за lresult.after используйте это, я не могу изменить свои поля. Почему бы вам не проверить себя? – shamim

ответ

5

Не думайте, что это возможно.

Анонимные типы - это типы классов, которые состоят из одного или нескольких общедоступных только для чтения.

Цитируется http://msdn.microsoft.com

+0

Я знаю, что. Но я хочу знать, есть ли какие-либо решения для решения этой проблемы. Предположим, что есть две таблицы «Заказы» и «ОрдерыДетали» базы данных Northwind.Теперь мне нужно выбрать оба значения табила, чем то, что нужно делать. В объявлении типа списка работают .Than как .Plz отправить некоторый синтаксис – shamim

+1

Если вы не хотите, чтобы они были только для чтения, вы НЕ МОЖЕТЕ использовать АНОНИМНЫЕ ТИПЫ, но вместо этого вы должны определить ваши собственные классы. – sgmoore

1

Это не представляется возможным.

Scott Guthrie покрыл его в part 9 of his LINQ to SQL series:

Одна особенность, которая не будет работы с Нестандартными формами/проекция, однако, является инлайн поддержки редактирования. Это связано с тем, что мы делаем пользовательскую проекцию в нашем событии Selecting, поэтому LinqDataSource не имеет возможности безопасно знать, как обновлять базовый объект объекта. Если мы хотим добавить поддержку редактирования в GridView с настраиваемым типом, нам нужно либо перейти к использованию элемента управления ObjectDataSource (где мы можем предоставить собственный метод метода обновления для обработки обновлений), либо пользователь может перейти к новую страницу при выполнении обновлений - и отображать элемент управления DetailsView или FormView, привязанный к объекту Product для редактирования (и не пытайтесь делать встроенное редактирование с помощью сетки).

+0

Я не хочу использовать datasource.I хочу заполнить сетку назад на C# .Что, что делать. Ваш данный url описывает, как работать gridview с помощью DataSource.Will u plz помогите мне заполнить сетку с помощью C# – shamim

Смежные вопросы