好的,我是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>
答案 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();
由于延迟执行,可能根本没有执行查询。