【问题标题】:How to bind a query with a join to a DataGridView?如何将带有联接的查询绑定到 DataGridView?
【发布时间】:2010-06-22 05:45:32
【问题描述】:

现在,我根据实体模型的对象上下文创建了一个新的对象数据源。然后我创建了一个 BindingSource 和一个设置为此 BindingSource 的 DataGridView。

我可以添加绑定到 TraceLine 表中的数据的列。当我设置 DataSource 时,我会在这些列中看到值。但是,我似乎无法从连接表中获取数据。如何将 DataGridView 绑定到具有联接的查询?

using (var entities = new MyEntities())
{
    var lines = from t in entities.Lines
                join m in entities.Methods on t.MethodHash equals m.MethodHash
                where t.UserSessionProcessId == m_SessionId
                select new
                {
                    m.Name,  // doesn't get displayed in DataGridView, but I want it to
                    t.Sequence,
                    t.InclusiveDuration,
                    t.ExclusiveDuration
                };

    dgvBindingSource.DataSource = lines;
}

【问题讨论】:

    标签: c# datagridview linq-to-entities ado.net-entity-data-model


    【解决方案1】:

    一个可能的问题是 DataGridView 可能在设计时将其 DataSource 设置为其中一种类型,但在运行时您将其设置为具有额外成员的匿名类型。如果我记得,如果您在生成列后更改数据源,DataGridView 将不会重新生成列。

    您可能需要将数据源设置为空,清除列集合,然后设置数据源。事实上,更好的办法是显式创建列而不是自动生成它们。

    【讨论】:

    • 只是好奇您是否建议不使用数据绑定,手动添加列,然后遍历集合并手动填写 datagridview?我知道这是一种选择,但这是最后的手段。
    • 不不...数据绑定没问题。但是 DataGridView 与大多数网格一样,将通过反映数据源来自动构建列。但是,如果您有针对构成匿名类型的类型之一的设计时绑定,则可能需要手动添加该列。单元格中的值应按预期进行数据绑定。
    猜你喜欢
    • 2011-01-24
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2014-07-07
    相关资源
    最近更新 更多