You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Syncfusion EJS-Grid能否为Lookup列创建独立筛选数据源?

解决方案:为Syncfusion Grid Lookup列创建独立数据源

完全可以为Lookup列创建独立的简易数据源,这正是解决你遇到的筛选性能问题和选项遗漏问题的最优方案之一。

核心原因分析

  • 默认情况下,Syncfusion Grid的Lookup列若直接绑定主数据源的关联字段,会从3万行的主数据集中提取唯一值作为筛选选项,这既会因遍历大量数据拖慢查询速度,还会受默认数据限制(比如你遇到的前1000条)导致遗漏后续记录中的选项。
  • 独立数据源仅存储Lookup列所需的键值对(如ID和显示文本),数据量远小于主数据集,能大幅提升筛选查询效率,同时确保所有可选值完整加载。

具体实现步骤

  1. 准备独立Lookup数据源

    • 在服务器端创建专用接口,返回该Lookup列对应的所有唯一键值对数据,示例代码:
      // 获取部门Lookup数据(仅包含ID和部门名称)
      public IActionResult GetDepartmentLookupData()
      {
          var departments = _dbContext.Departments.Select(d => new { Id = d.Id, Name = d.Name }).ToList();
          return Ok(departments);
      }
      
    • 确保接口返回去重后的完整集合,避免重复选项。
  2. 配置Grid列使用独立数据源

    • 在Grid列配置中,将Lookup列的dataSource指向上述独立接口,而非主数据源。以ASP.NET Core为例:
      <e-grid-column field="DepartmentId" headerText="部门" width="150">
          <e-lookup dataSource="@Url.Action("GetDepartmentLookupData")" fields="@new { Value = "Id", Text = "Name" }" />
      </e-grid-column>
      
    • 开启服务器端筛选时,确保Lookup列的筛选逻辑直接基于该独立数据源,而非从主数据集提取。
  3. 优化筛选性能

    • 为独立Lookup数据源添加服务器端缓存,避免每次筛选都查询数据库:
      public IActionResult GetDepartmentLookupData()
      {
          var cacheKey = "DepartmentLookupData";
          if (!_cache.TryGetValue(cacheKey, out List<object> departments))
          {
              departments = _dbContext.Departments.Select(d => new { Id = d.Id, Name = d.Name }).ToList<object>();
              _cache.Set(cacheKey, departments, new MemoryCacheEntryOptions { SlidingExpiration = TimeSpan.FromHours(1) });
          }
          return Ok(departments);
      }
      

额外注意事项

  • 确保独立数据源的键值类型与主数据集中的关联字段一致,避免匹配错误。
  • 若Lookup数据有更新需求,可设置合理的缓存过期时间,或在数据更新时主动清除缓存,保证选项实时性。

内容的提问来源于stack exchange,提问作者sreimer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:55:00