将LINQ查询绑定到DataGridView
这非常令人困惑,我使用AsDataView将查询结果绑定到dgv,它可以很好地处理以下内容:将LINQ查询绑定到DataGridView,linq,linq-to-sql,data-binding,datagridview,linq-to-dataset,Linq,Linq To Sql,Data Binding,Datagridview,Linq To Dataset,这非常令人困惑,我使用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
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'
实例参数:无法从转换
“System.Collections.Generic.IEnumerable”到
“System.Data.DataTable”
AsDataView未显示在查询中。(列表)。为什么会这样?那么如何将上述查询绑定到dgv?的签名如下:
public static DataView AsDataView(
this DataTable table
)
唯一的参数是
您的查询返回的是匿名类型的,该类型没有到DataTable的隐式转换(或实例序列,在这种情况下,您可以使用它来帮助您创建DataTable)
您需要将结果返回到DataTable或其他可以转换为DataTable的内容中,然后它才能工作
在您的特殊情况下,您似乎正在(或正在)使用。如果是这种情况,那么您应该能够获取所选的值,然后创建新的类型化DataRow实例(应该有适合您的工厂方法),然后将其放入类型化DataTable中,可以调用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
}.ToList();
dataGridView1.DataSource = query;
谢谢,但我正在寻找一种简单的方法,有些现成的方法不起作用。所以我想我会用SqlCeDataReader来代替它。@DanSogaard:我已经更新了我的答案,以反映您正在使用类型化数据集,以及您可能仍然能够使用AsDataView扩展方法的事实。请查看此链接:也许在这里您可以找到答案: