2009-05-23 93 views
2

好的,我對LINQ很陌生,並且花了上週的時間閱讀所有可能的東西。我只是在玩耍,試圖追蹤我發現的一些例子(實際上Scott Gu關於這個話題的一個PDF),並且我完全喪失了。有人可以告訴我爲什麼,當我將GridView綁定到下面的查詢時,使用下面的代碼,我得不到數據?我可以在調試時看到結果,所以我知道他們從數據庫回來了,但它們顯然沒有正確綁定。我讀了一些說不能直接綁定到結果的東西,並且必須使用BindingSource作爲中間步驟?無法將GridView綁定到LINQ to SQL結果

有人,請告訴我我在這裏失蹤。

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> 

回答

3

您不應該轉換爲列表或數組。綁定至少需要一個IEnumerable <T>,這就是你的Users變量。匿名類型只是編譯器生成的具體類型的預編譯佔位符,因此您應該也可以綁定到匿名類型。

您的GridView可能沒有AutoGeneratedColumns屬性集,這是使數據源定義顯示的列所需的內容。嘗試啓用它,並查看您的GridView是否顯示查詢結果。

+0

它實際上證明是AutoGenerateColumns。我正在使用HeroCoder.com中的一些代碼,我們不時使用小型項目,以避免必須連接所有成員資格 - 它爲asp.net成員資格提供了一個簡單而穩固的管理工具。無論如何,事實證明,他們正在其代碼中禁用AutoGenerateColumns。將它添加回我的gridview顯然做了建議。謝謝! – TheUXGuy 2009-05-23 20:18:36

0

嘗試做

GridView1.DataSource = users.ToList(); 

GridView1.DataSource = users.ToArray(); 

可能是該查詢沒有執行,因爲延遲執行的一切事物。

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> 
+0

感謝您花時間做到這一點。總之,你是對的。它應該工作。我不知道發生了什麼事。我已經將LINQ to SQL Classes項目添加到現有項目並從那裏開始工作 - 該項目中必須有一些內容阻止代碼正常運行。不知道是什麼,但我也從頭開始創建一個新項目,並使用完全相同的代碼 - 並且它工作正常!現在我有一些工作要做! – TheUXGuy 2009-05-23 17:19:07

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