C# 如何将LINQ查询与DataGridView一起使用,但不使用表列的子集?
我试图从一个代码示例中学习,但我显然不了解LINQ的真正工作原理。我想做的是用强类型数据集中表中可用列的子集填充“查找窗口”的DataGridView。我正在尝试以下几点:C# 如何将LINQ查询与DataGridView一起使用,但不使用表列的子集?,c#,linq,datagridview,strongly-typed-dataset,C#,Linq,Datagridview,Strongly Typed Dataset,我试图从一个代码示例中学习,但我显然不了解LINQ的真正工作原理。我想做的是用强类型数据集中表中可用列的子集填充“查找窗口”的DataGridView。我正在尝试以下几点: IEnumerable<DataRow> query = (from t in DataAccess.ds.GL40200.AsEnumerable() where t.SGMTNUMB == 3 select new { t.SGMNT
IEnumerable<DataRow> query =
(from t in DataAccess.ds.GL40200.AsEnumerable()
where t.SGMTNUMB == 3
select new { t.SGMNTID, t.DSCRIPTN });
DataTable myTable = query.CopyToDataTable<DataRow>();
dgv_Exhibitors.DataSource = myTable;
您能用一种简单的方法来填充DataGridView,使其只包含两个所需的列吗?如果有比使用LINQ更好或更简单的方法,我愿意接受建议。它失败了,因为您的
select
语句正在创建一个包含两个字段的匿名类。它不再是DataRow
,编译器也不知道如何通过cast()
将其转换回DataRow
一种选择是坚持使用有效的方法,然后简单地隐藏您不希望在
DataGridView
中看到的列:
dgv_Exhibitors.DataSource =
DataAccess.ds.GL40200.AsEnumerable().Where(t => t.SGMTNUMB == 3).CopyToDataTable();
foreach (var col in dgv_Exhibitors.Columns.Cast<DataGridViewColumn>()
.Where(c => c.Name != "SGMNTID" && c.Name != "DSCRIPTN"))
{
col.Visible = false;
}
扩展Grant Winney的答案,使用而不是
IEnumerable
来接收匿名类型
var query =
(from t in DataAccess.ds.GL40200.AsEnumerable()
where t.SGMTNUMB == 3
select new { t.SGMNTID, t.DSCRIPTN });
如果您希望在数据表中显示结果,则必须创建一个并逐个添加值
DataTable myTable = new DataTable();
myTable.Columns.Add("SGMNTID", typeof(int));
myTable.Columns.Add("DSCRIPTN", typeof(string));
foreach (var x in query)
{
DataRow dr = myTable.NewRow();
dr[0] = x.SGMNTID;
dr[1] = x.DSCRIPTN;
myTable.Rows.Add(dr);
}
dgv_Exhibitors.DataSource = myTable;
dgv_Exhibitors.DataSource = (from t in DataAccess.ds.GL40200.AsEnumerable()
where t.SGMTNUMB == 3
select new { t.SGMNTID, t.DSCRIPTN }).ToList();
var query =
(from t in DataAccess.ds.GL40200.AsEnumerable()
where t.SGMTNUMB == 3
select new { t.SGMNTID, t.DSCRIPTN });
DataTable myTable = new DataTable();
myTable.Columns.Add("SGMNTID", typeof(int));
myTable.Columns.Add("DSCRIPTN", typeof(string));
foreach (var x in query)
{
DataRow dr = myTable.NewRow();
dr[0] = x.SGMNTID;
dr[1] = x.DSCRIPTN;
myTable.Rows.Add(dr);
}
dgv_Exhibitors.DataSource = myTable;