无法将GridView绑定到LINQ to SQL Result

时间:2009-05-23 16:36:36

标签: linq linq-to-sql

好的,我是LINQ的新手,并且花了最后一周阅读我能做的一切。我只是在玩,试着按照我发现的一些例子(实际上是关于这个主题的Scott Gu的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 个答案:

答案 0 :(得分:3)

不能理解为什么这不起作用。我使用(差不多)你的代码将页面搅打在一起。它对我来说很完美。

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>

答案 1 :(得分:3)

您不必转换为List或Array。绑定至少需要IEnumerable&lt; T&gt;,这是您的Users变量。匿名类型只是编译器生成的具体类型的预编译占位符,因此您还应该能够绑定到匿名类型。

您的GridView可能没有设置AutoGeneratedColumns属性,这是使数据源定义显示哪些列所需的属性。尝试启用它,看看你的GridView是否显示你的查询结果。

答案 2 :(得分:1)

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();   
}   

答案 3 :(得分:0)

尝试

GridView1.DataSource = users.ToList();

GridView1.DataSource = users.ToArray();

由于延迟执行,可能根本没有执行查询。