【问题标题】:Using EF5 to bind to Data Grid View issue使用 EF5 绑定到数据网格视图问题
【发布时间】:2013-07-25 14:33:20
【问题描述】:

我是使用 EF 的新手,我目前正在使用 EF5 尝试将数据从视图绑定到 WinForms 应用程序中的数据网格视图。我不确定如何正确执行此操作,并且出现错误:

不支持直接将数据绑定到存储查询(DbSet、DbQuery、DbSqlQuery)。而是使用数据填充 DbSet,例如通过在 DbSet 上调用 Load,然后绑定到本地数据。对于 WPF 绑定到 DbSet.Local。对于 WinForms 绑定到 DbSet.Local.ToBindingList()。

这是我的代码:

using (MyEntities context = new MyEntities ())
        {

            var qry = from col in context.vwSystemProperties
                      select new
                          {
                              SystemPropertyName = col.SystemPropertyName,
                              SystemPropertyEnumVal = col.SystemPropertyEnumVal,
                              SystemPropertyValue = col.SystemPropertyValue,
                              ApplicationScope = col.ApplicationScope,
                              CategoryScope = col.CategoryScope,
                              EntityScope = col.EntityScope,
                              VersionDate = col.VersionDate,
                              VersionUser = col.VersionUser
                          };


            BindingSource bs = new BindingSource();
            bs.DataSource = qry;
            SystemPropertyDGV.DataSource = bs;

        }

我不认为我完全理解错误引导我做什么。我做了一些简短的搜索,但我认为我没有找到我需要的东西。 DbSet 应该如何实现和用于将数据绑定到 DGV,或者是否有更简单的方法?

能否提供一些关于如何将 qry 对象正确绑定到数据网格视图的见解?现在我只需要查看数据,但以后我希望能够访问一行并根据 ID 更新它。

谢谢

【问题讨论】:

    标签: c# winforms entity-framework


    【解决方案1】:

    只需对返回的查询使用ToList() 方法即可。

    尝试以下方法:

    using (MyEntities context = new MyEntities ())
    {
    
        var qry = from col in context.vwSystemProperties
                  select new
                      {
                          SystemPropertyName = col.SystemPropertyName,
                          SystemPropertyEnumVal = col.SystemPropertyEnumVal,
                          SystemPropertyValue = col.SystemPropertyValue,
                          ApplicationScope = col.ApplicationScope,
                          CategoryScope = col.CategoryScope,
                          EntityScope = col.EntityScope,
                          VersionDate = col.VersionDate,
                          VersionUser = col.VersionUser
                      };
    
    
        BindingSource bs = new BindingSource();
        bs.DataSource = qry.ToList();
        SystemPropertyDGV.DataSource = bs;
    
    }
    

    【讨论】:

    • 我认为您应该解释您的答案与 OP 代码有何不同 :)
    • 它起作用了......我的 ID10T 错误之一。是否有与我正在尝试的不同的最佳实践方式?我看到我可以消除 BindingSource 对象,只需在 DGV 上执行 qry.ToList()。
    • 我在使用 Janus Grids 时遇到了同样的问题,添加 ToList 总能为我解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2011-08-05
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多