【问题标题】:Using LINQ query result for data source for GridControl c#将 LINQ 查询结果用于 GridControl c# 的数据源
【发布时间】:2012-08-07 17:34:14
【问题描述】:

我在静态类中有这样的函数

public static IEnumerable<MyObject> getFilteredList(int docType)
{
    var fItems = from i in list
                 where i.DocType == docType
                 select i;

    return fItems;
}

当我将这个返回的列表用于我的网格中的数据源时,例如:

GridControl.DataSource = staticClass.getFilteredList(10)

Grids DataSource 属性为空。你能解释一下为什么会这样吗?

编辑:列表变量是 List,其中包含 DocType = 10 的元素。 Items 包含元素。

【问题讨论】:

  • 那之后你还在使用 databind() 吗?
  • wpf 还是 winforms?形成您将 linq 迭代器分配给数据源的代码,而不是 List。试试添加ToArray()ToList() 是否有帮助。

标签: c# linq datagrid


【解决方案1】:

你可以试试 ToList()

GridControl.DataSource = staticClass.getFilteredList(10).ToList();
GridControl.DataBind();

【讨论】:

    【解决方案2】:

    你应该使用

    GridControl.DataSource = staticClass.getFilteredList(10).ToList();
    

    创建一个新的List 实例以绑定到您的网格。

    另一种方法是使用BindingList,它完全支持数据绑定并为您提供有用的事件,例如ListChangedAddingNew

    var list = new BindingList(staticClass.getFilteredList(10).ToList());
    
    GridControl.DataSource = list;
    

    【讨论】:

      【解决方案3】:

      试试

      GridControl.DataSource = staticClass.getFilteredList(10).ToList();
      

      因为DataSource必须继承自IList

      【讨论】:

        【解决方案4】:
        public static IEnumerable<MyObject> getFilteredList(int docType)
            {
                var fItems = from i in list
                             where i.DocType.docTypeId == docType
                             select i;
        
                return fItems;
            }
        

        如果我错了,请纠正我,但现在似乎您正在将 int 与 DocType 类进行比较。如果不是这种情况,那么您的查询可能只是返回一个空集,因为它找不到任何匹配的内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多