У меня довольно сложный запрос Linq, который я не могу попасть в LinqDataSsource для использования в GridView:
IEnumerable<ticket> tikPart = (
from p in db.comments where
p.submitter == me.id &&
p.ticket.closed == DateTime.Parse("1/1/2001") &&
p.ticket.originating_group != me.sub_unit
select p.ticket
).Distinct();
Как я могу получить это в GridView? Спасибо!





gridview.DataSource = tikPart.ToList();
gridview.DataBind();
Вы можете использовать источник данных объекта и привязать его к методу, который возвращает этот запрос. Я никогда не использую LinqDatasource, поэтому не могу там помочь
При выполнении упомянутого мною метода вы должны сами выполнять сортировку и подкачку страниц. Возможно, было бы проще использовать предложенное выше предложение matts с LinqDataSource.
Если вам нужна сортировка и разбивка по страницам LinqToSqlDataSource или ObjectDataSource - лучшие способы, в противном случае вам придется использовать генерацию выражений на лету, что может стать некрасивым (как выяснил мой босс!)
Вы можете настроить Gridview без источника данных. Настройте столбцы gridview и в программном обеспечении привяжите этот результат к представлению сетки.
Спасибо за вклад! У вас есть какой-нибудь пример, где я мог бы это увидеть? Я понимаю концепцию, но пример поможет ...
Это довольно просто. Создайте класс с таким методом, как GetData (). Добавьте источник данных объекта на свою страницу. используйте смарт-тег для его настройки, и вам понадобится только запрос выбора при отображении данных. Итак, настройте это для вызова только что созданного вами метода классов.
@leppie - Нет необходимости вызывать ToList () в IQueryable при его присоединении в качестве источника данных.
Если ваш DataContext не был удален до вызова метода DataBind, ToList является избыточным вызовом.
По умолчанию DataContext использует отложенную загрузку, так что данные извлекаются из базы данных только при перечислении IQueryable. ToList () выполняет перечисление и вызывает вызов, так же как и DataBind ().
Итак, вы можете сделать что-то вроде этого:
using(MyDataContext ctx = new MyDataContext(){
this.MyGridView.DataSource = from something in ctx.Somethings where something.SomeProperty == someValue select something;
this.MyGridView.DataBind();
}
В зависимости от того, как вы распоряжаетесь своим DataContext, определяет, что привязывать к источнику данных.
Затем вы можете либо использовать автоматически сгенерированные столбцы в GridView, чтобы каждое свойство в возвращаемом объекте было преобразовано в столбец, либо вы можете написать столбцы с дизайнером и настроить там правила привязки.
Спасибо за дополнительную информацию. У меня все еще было впечатление, что для свойства DataSource нужен IList :)
leppie - Вам нужно только убедиться, что в вашем источнике данных реализован IEnumerable. Если вы проверите, что реализует IList и IQueryable, вы сможете отследить все это вплоть до IEnumerable :)
Вы можете привязать тип IQueryable <> к GridView с помощью элемента управления LinqDataSource. http://johnsobrepena.blogspot.com/2010/01/data-bind-coolgridview-to-iqueryable.html
Вау ... это так просто, когда я это вижу. Есть ли способ получить это в DataSource, чтобы я мог использовать сортировку GridVIew?