2009-05-23 9 views
2

OK、私はまったく新しいLINQで、先週私ができることをすべて読んで過ごしました。私はちょうど私が見つけたいくつかの例に従おうとしています(実際には、スコット・グーからのPDFを参照)、私は完全に喪失しています。誰かが私に以下のコードを使用して、以下のクエリにGridViewをバインドすると、なぜデータが得られないのか教えてください。私はデバッグ中に結果を見ることができるので、彼らはDBから戻ってくることを知っている、彼らはちょうど明らかに正しくバインドされていません。結果に直接バインドできず、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

リストや配列に変換する必要はありません。バインディングには、少なくともUsers変数であるIEnumerable <T>が必要です。匿名型は、コンパイラが生成する具体的な型のプレースホルダをプレコンパイルするだけなので、匿名型にもバインドする必要があります。

グリッドビューにAutoGeneratedColumnsプロパティが設定されていない可能性があります。これは、データソースにどの列が表示されるかを定義するために必要な設定です。これを有効にして、GridViewがクエリ結果を表示するかどうかを確認してください。

+0

実際には、それはAutoGenerateColumnsでした。私はHeroCoder.comのコードを使用しています。時には小規模なプロジェクトで使用するので、メンバーシップのすべてをワイヤリングする必要がありません。これは、asp.netメンバーシップのためのシンプルで強固な管理ツールです。とにかく、彼らは彼らのコードでAutoGenerateColumnsを無効にしていることが分かります。明示的に私のgridviewにそれを追加することは示唆されたトリックをしました。ありがとう! – TheUXGuy

+0

喜んでサービスになる。私は何度もこの問題にぶつかってきました。 :D – jrista

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

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(); 
} 
関連する問題