1

我在将 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 一样。

从我在本网站和其他网站上阅读的内容来看,我应该对我正在做的事情没有任何问题,但无论如何我都无法获得正确的结果。有任何想法吗?如果您需要更多可以提供帮助的信息,请告诉我。

编辑 1:其他详细信息。

我尝试了以下几行,但均未成功:

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 数据源向导提供的。

4

1 回答 1

0

使用以下方式编写:

this.MYDSDataSet.MYTABLE.AsEnumerable().Select(x => x)

DataTable RowCollection 没有实现 IEnumerable,因此除非使用 AsEnumerable() 对其进行转换,否则无法对其运行查询

编辑 - 无法在其他答案中添加评论以进行讨论。

在 VS2010 中使用 MYTABLE.Select(x => x) 对我不起作用。它返回以下错误:无法将 lambda 表达式转换为类型“字符串”,因为它不是委托类型。Select() 需要一个字符串表达式,而不是 lambda。

于 2012-07-25T19:56:39.467 回答