【问题标题】:Binding LINQ query to DataGridView将 LINQ 查询绑定到 DataGridView
【发布时间】:2011-01-24 11:50:45
【问题描述】:

这很令人困惑,我使用 AsDataView 将查询结果绑定到 dgv,它适用于以下内容:

var query = from c in myDatabaseDataSet.Diamond where c.p_Id == p_Id select c;
dataGridView1.DataSource = query.AsDataView();

但是,这会导致错误:

var query = from item in myDatabaseDataSet.Items
    where item.p_Id == p_Id
    join diamond in myDatabaseDataSet.Diamond
        on item.p_Id equals diamond.p_Id
    join category in myDatabaseDataSet.DiamondCategory
        on diamond.dc_Id equals category.dc_Id
    select new
    {
        Product = item.p_Name,
        Weight = diamond.d_Weight,
        Category = category.dc_Name
    };

    dataGridView1.DataSource = query.AsDataView();

错误:

Instance argument: cannot convert from
'System.Collections.Generic.IEnumerable<AnonymousType#1>' to 
'System.Data.DataTable'

AsDataView 未显示在查询中。(列表)。为什么会这样?那么如何将上面的查询绑定到dgv呢?

【问题讨论】:

标签: linq linq-to-sql data-binding datagridview linq-to-dataset


【解决方案1】:

只需将结果转换为列表并将其绑定到您的网格。

var query = from item in myDatabaseDataSet.Items
    where item.p_Id == p_Id
    join diamond in myDatabaseDataSet.Diamond
        on item.p_Id equals diamond.p_Id
    join category in myDatabaseDataSet.DiamondCategory
        on diamond.dc_Id equals category.dc_Id
    select new
    {
        Product = item.p_Name,
        Weight = diamond.d_Weight,
        Category = category.dc_Name
    }.ToList();
dataGridView1.DataSource = query;

【讨论】:

    【解决方案2】:

    AsDataView的签名如下:

    public static DataView AsDataView(
        this DataTable table
    )
    

    唯一的参数是DataTable

    您的查询返回一个匿名类型的 IEnumerable,它没有隐式转换为 DataTable(或一系列 DataRow 实例,在这种情况下,您可以使用它来帮助您创建一个数据表)。

    您需要将结果返回到 DataTable 或可以转换为 DataTable 的东西,然后它才能工作。

    在您的特定情况下,您似乎曾经(或正在)使用typed DataSets。如果是这种情况,那么您应该能够获取选择的值,然后创建新的类型化 DataRow 实例(应该有适合您的工厂方法),然后可以将其放入类型化 DataTable 中,可以调用 AsDataView .

    【讨论】:

    • 谢谢,但我正在寻找一种简单的方法,其中一些现成的方法不起作用。所以我想我会用 SqlCeDataReader 来代替。
    • @DanSogaard:我已经更新了我的答案,以反映您正在使用类型化数据集的事实以及您如何仍然能够使用 AsDataView 扩展方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多