我遇到了将DataGridView绑定到基于强类型数据表的LINQ结果的问题。直接绑定到DataTable工作正常。工作示例:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// TODO: This line of code loads data into the 'MYDSDataSet.MYTABLE' table. You can move, or remove it, as needed.
this.MYTABLETableAdapter.Fill(this.MYDSDataSet.MYTABLE);
this.dataGridView1.DataSource = this.MYDSDataSet.MYTABLE;
}
}
使用以下行不起作用:
this.dataGridView1.DataSource = this.MYDSDataSet.MYTABLE.Select(x => x);
通过工作/不工作我的意思是在第一个例子中,我的datagridview将自动生成数据表的所有列并显示所有结果。在第二个例子中,我不会得到任何错误,但我的datagridview将保持完全为空,就像我根本没有分配任何DataSource一样。
从我在本网站和其他网站上看到的内容我应该对我正在做的事情没有任何问题,但无论如何我都无法得到正确的结果。有任何想法吗?如果您需要更多可以提供帮助的信息,请告诉我们。
Edit1:其他详细信息。
我尝试了以下几行,都没有成功:
this.dataGridView1.DataSource = this.MYDSDataSet.Tables["MYTABLE"].AsEnumerable().Select(x => x);
this.dataGridView1.DataSource = this.MYDSDataSet.MYTABLE.AsEnumerable().Select(x => x);
this.dataGridView1.DataSource = this.MYDSDataSet.MYTABLE.Select(x => x).ToList();
this.dataGridView1.DataSource = from x in this.MYDSDataSet.MYTABLE select x;
上面的所有结果数据子集在调试时都包含正确的数据/行数。
我的强类型数据表是Visual Studio 2010数据源向导提供的数据表。
答案 0 :(得分:0)
使用以下方式编写:
this.MYDSDataSet.MYTABLE.AsEnumerable().Select(x => x)
DataTable RowCollection不实现IEnumerable,因此除非使用AsEnumerable()
转换它,否则无法对其进行查询编辑 - 在其他答案中无法将评论添加到讨论中。
使用MYTABLE.Select(x => x)在VS2010中对我不起作用。它返回以下错误: 无法将lambda表达式转换为类型'string',因为它不是委托类型。 Select()需要一个字符串表达式,而不是lambda。