Можно ли сделать запрос linq на GridView (ASP.NET)? - PullRequest
3 голосов
/ 13 сентября 2010

По сути, у меня есть ключ данных, который я хотел бы запросить из моего GridView, вместо того, чтобы перебирать все строки и сравнивать ключ каждой строки.Поэтому мне было интересно, можно ли было просто выполнить запрос linq для вида сетки (без данных) и отфильтровать с помощью ключа данных.

Ответы [ 4 ]

3 голосов
/ 13 сентября 2010

Не уверен, как использовать DataKeyNames напрямую, потому что Column не имеет никакой информации об имени поля данных, из которого он получен.В приведенном ниже примере я использую SortExpression для получения индекса столбца, который используется для фильтрации.

РЕДАКТИРОВАТЬ: наиболее важной частью здесь является приведение, которое позволяет вам использовать все причудливые методы расширения, разработанные для IEnumerable .

int idColumnIndex = MyGrid.Columns.Cast<DataControlField>().Where(e => e.SortExpression == "ID").Select(e => MyGrid.Columns.IndexOf(e)).FirstOrDefault();
var row = MyGrid.Rows.Cast<GridViewRow>().Where(e => e.Cells[idColumnIndex].Text == "421").FirstOrDefault();

Все возможно!

1 голос
/ 13 сентября 2010

Насколько я понимаю теорию LINQ, ее можно выполнить по любому списку. Поскольку источник данных в виде сетки по сути является списком, вы должны иметь возможность использовать LINQ для этого источника данных в виде сетки.

Попробуйте этот пример:

http://weblogs.asp.net/scottgu/archive/2006/05/14/Using-LINQ-with-ASP.NET-_2800_Part-1_2900_.aspx

1 голос
/ 13 сентября 2010

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

0 голосов
/ 13 сентября 2010

Я сделал нечто подобное с ретранслятором, и, возможно, это поможет ... или вы можете просто проигнорировать это, если это не так. В моей ситуации я привязал ретранслятор к данным и позволил пользователям изменять данные перед экспортом в XML. Следующий LINQ проходит по каждой строке в повторителе, использует findcontrol для получения элемента управления из базы данных, а затем использует Linq to XML, но это можно использовать для генерации объектов с использованием LINQ to Objects. rp - это повторитель, cbIgnore - это флажок, который, если пользователи его проверяют, строка не экспортируется.

    Dim doc As New XDocument( _
        New XDeclaration("1.0", "ISO-8859-1", "true"), _
        New XElement("Schedule_Import", _
                     From c As RepeaterItem In rp.Items _
                     Where (c.ItemType = ListItemType.Item Or c.ItemType = ListItemType.AlternatingItem) _
                     AndAlso DirectCast(c.FindControl("cbIgnore"), HtmlInputCheckBox).Checked = False _
                     Select New XElement("activity", _
                                         New XElement("code", DirectCast(c.FindControl("txtAC"), TextBox).Text), _
                                         New XElement("starttime", DirectCast(c.FindControl("dtfStart"), DateTimeField).SelectedDateTime), _
                                         New XElement("endtime", DirectCast(c.FindControl("dtfEnd"), DateTimeField).SelectedDateTime), _
                                         New XElement("description", DirectCast(c.FindControl("txtTitle"), TextBox).Text))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...