データグリッド ビューに問題があります。コードとエラーメッセージを含む画像を添付しました。このエラーの理由を知りたいです。ありがとう。
2 に答える
LINQ クエリは必要ありません。リストを DataSource として設定するだけです。この場合、DataMember を設定する必要はありません。
private void Form4_Load(object sender, EventArgs e)
{
List<Products> productList = new List<Products>()
{
new Products{ProductName = "P1", ProductPrice = 56, Category = "c1"},
new Products{ProductName = "P2", ProductPrice = 36, Category = "c1"}
};
//var p = from s in productList select s;
dataGridView1.DataSource = productList;
//dataGridView1.DataMember = p.ToString();
}
編集
LINQ クエリが返されIEnumerable
ます。ただし、DataGridView クラスは、標準の Windows フォーム データ バインディング モデルをサポートしています。つまり、データ ソースは、IList、IListSource、IBindingList、および IBindingListView のいずれかのインターフェイスを実装する任意の型にすることができます。ToList()
そのため、LINQ の結果を呼び出す必要があります。詳細については、このMSDN リンクを参照してください。
ただし、あなたの場合、これを行うことはproductList
DataSource として設定することと同じです (LINQ クエリには並べ替えやグループ化がないため、結果は同じになります)。
LINQ で遊びたい場合は、これを試してください (リストはProductPrice
昇順で並べられます) 。
var p = from s in productList orderby s.ProductPrice select s;
dataGridView1.DataSource = p.ToList();
設定する代わりに、DataMember
単純に bind メソッドを呼び出しますdataGridView1.DataBind()
。MSDNで述べられDataMember
ているように、次の目的で使用されます。
DataGridView がデータを表示しているデータ ソース内のリストまたはテーブルの名前を取得または設定します。