【问题标题】:DataGridView not binding to my linq queriesDataGridView 未绑定到我的 linq 查询
【发布时间】:2012-07-24 07:57:59
【问题描述】:

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

【问题讨论】:

  • 只是为了笑,this.dataGridView1.DataSource = this.MYDSDataSet.MYTABLE.Select(x => x).ToList(); 有效吗?
  • 不,这也没有给我任何数据。

标签: c# linq binding datagridview


【解决方案1】:

使用:

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

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

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

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

【讨论】:

  • 我的数据表(也许我解释错了)已经实现了 IEnumerable,所以我发布的表达式不存在任何语法或其他错误。我在该行代码中添加了“AsEnumerable()”调用作为测试并得到相同的(空)结果。
猜你喜欢
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多