web-dev-qa-db-ja.com

linq / Entity Frameworkを使用してグリッドビューをバインドする方法は?

GridViewをバインドする必要があります。次のコードを使用しています:

  ProductDBEntities db = new ProductPDBEntities();

    var pro = from u in db.Products where u.PID == 1 select u;

    if (pro != null)
    {
        GridView1.DataSource = pro;
        GridView1.DataBind();
    }

このエラーが発生します。

System.InvalidOperationException:シーケンスに複数の要素が含まれています

誰かが私が間違っていることを教えてもらえますか?

8
Kay

Duplicationを確認してから、バインドしてみてください。

完全なコードを表示するために、最後の回答を編集しました。

ProductDBEntities db = new ProductPDBEntities();
GridView1.DataSource = (from u in db.Products where u.PID == 1 select u).First();
GridView1.DataBind();
4
Nasser Hadjloo

このコードは役立つかもしれません:

    gv.DataSource = (from u in db.Products .First(u=> u.PID==1)).ToList();

テーブルがあり、テーブルの詳細がこれを使用できる場合:

    gv.DataSource = (from a in context.tblorder.First(p => p.id == 19).tblorderdetail where a.ID == 19 select a).ToList();
1
atefeNaeni

私はこのように解決します:

ProductDBEntities ctx = new ProductDBEntities ();
var q1 = ctx.Products.Where(x => x.PID == 1).ToList();
GridView1.DataSource = q1;
GridView1.DataBind();

やってみます。うまくいきます。

0
Hüseyin Biçen

まず、データをチェックして、PID = 1の製品が複数あるかどうかを確認します。

次に、.First()メソッドを使用して、バインドの結果が1つだけになるようにすることができます。

var pro = (from u in db.Products where u.PID == 1 select u).First();
0
Cylon Cat

変数をオブジェクトタイプに格納し、オブジェクトタイプをデータソースとしてグリッドに割り当てます

0
Azeem

DataSourceに追加するときは、ToList()を実行する必要があると思います。

ProductDBEntities db = new ProductPDBEntities();

var pro = from u in db.Products where u.PID == 1 select u;

if (pro != null)
{
    GridView1.DataSource = pro.ToList();
    GridView1.DataBind();
}

注:これはGridViewであるため、n行を取る必要があります。 No row limit

0
anishMarokey