Не удается связать GridView с результатом LINQ to SQL - PullRequest
2 голосов
/ 23 мая 2009

ОК, я совершенно новичок в LINQ и провел последнюю неделю, читая все, что мог на нем. Я просто играю, пытаюсь следовать некоторым примерам, которые я нашел (PDF-файл от Скотта Гу на эту тему, на самом деле), и я в полной растерянности. Может кто-нибудь сказать мне, почему, когда я связываю GridView с запросом ниже, используя код ниже, я не получаю данных ?? Я могу видеть результаты во время отладки, так что я знаю, что они возвращаются из БД, просто они явно не связываются правильно. Я читал что-то, говоря, что вы не можете связать непосредственно с результатом, и что вы должны использовать BindingSource в качестве промежуточного шага?

Кто-то, пожалуйста, скажите мне, что мне здесь не хватает.

protected void Page_Load(object sender, EventArgs e)
{
    SwapDBDataContext db = new SwapDBDataContext();

    var users = from u in db.aspnet_Users
                select new
                {
                   Name =  u.UserName,
                   ID = u.UserId
                };

    GridView1.DataSource = users;
    GridView1.DataBind();

}

Я просто использую пустой GridView. Я предполагал, что привязка позаботится о настройке столбцов в соответствии с результирующими столбцами из запроса - была ли это глупая ошибка новичков?

    <asp:GridView ID="GridView1" runat="server">
    </asp:GridView>

Ответы [ 4 ]

3 голосов
/ 23 мая 2009

Не могу понять, почему это не должно работать. Я собрал страницу, используя (почти) ваш код. У меня отлично работает.

protected void Page_Load(object sender, EventArgs e)
{
    BlodsockerkollenDataContext db = new BlodsockerkollenDataContext();
    var members = from m in db.Members
                  select new { Id = m.Id, Email = m.Email };

    GridView1.DataSource = members;
    GridView1.DataBind();
}

Я не согласен с предлагаемыми ответами о том, что вы должны использовать ToList (). GridView способен принимать и обходить IEnumerable, а IQueryable наследует IEnumerable.

И нет, не нужно объявлять BindingSource.

Может быть, вы объявили что-то в вашем GridView? Моя просто пуста, вытянута прямо из ящика с инструментами:

<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
3 голосов
/ 23 мая 2009

Вам не нужно преобразовывать в список или массив. Для привязки требуется, как минимум, IEnumerable , которым является ваша переменная Users. Анонимные типы - это просто прекомпиляционные заполнители для сгенерированных компилятором конкретных типов, поэтому вы также должны иметь возможность связываться с анонимными типами.

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

1 голос
/ 18 ноября 2010
protected void Page_Load(object sender, EventArgs e)   
{   
   SwapDBDataContext db = new SwapDBDataContext();   

   GridView1.DataSource = from u in db.aspnet_Users   
            select new   
            {   
               Name =  u.UserName,   
               ID = u.UserId   
            };   

  GridView1.DataBind();   
}   
0 голосов
/ 23 мая 2009

Попробуйте сделать

GridView1.DataSource = users.ToList();

или

GridView1.DataSource = users.ToArray();

Возможно, что запрос вообще не выполняется из-за отложенного выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...