0

我在使用数据网格视图时遇到问题。我附上了带有代码和错误消息的图像。我想知道这个错误的原因。谢谢。在此处输入图像描述

4

2 回答 2

0

而不是设置DataMember简单地调用绑定方法dataGridView1.DataBind()。正如MSDN所述,DataMember它用于以下用途:

获取或设置 DataGridView 正在为其显示数据的数据源中的列表或表的名称。

于 2012-06-17T05:01:36.023 回答
0

您不需要 LINQ 查询。只需将列表设置为数据源。在这种情况下无需设置 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();
于 2012-06-17T06:18:02.317 回答