Syncfusion EJS-Grid能否为Lookup列创建独立筛选数据源?
解决方案:为Syncfusion Grid Lookup列创建独立数据源
完全可以为Lookup列创建独立的简易数据源,这正是解决你遇到的筛选性能问题和选项遗漏问题的最优方案之一。
核心原因分析
- 默认情况下,Syncfusion Grid的Lookup列若直接绑定主数据源的关联字段,会从3万行的主数据集中提取唯一值作为筛选选项,这既会因遍历大量数据拖慢查询速度,还会受默认数据限制(比如你遇到的前1000条)导致遗漏后续记录中的选项。
- 独立数据源仅存储Lookup列所需的键值对(如ID和显示文本),数据量远小于主数据集,能大幅提升筛选查询效率,同时确保所有可选值完整加载。
具体实现步骤
准备独立Lookup数据源
- 在服务器端创建专用接口,返回该Lookup列对应的所有唯一键值对数据,示例代码:
// 获取部门Lookup数据(仅包含ID和部门名称) public IActionResult GetDepartmentLookupData() { var departments = _dbContext.Departments.Select(d => new { Id = d.Id, Name = d.Name }).ToList(); return Ok(departments); } - 确保接口返回去重后的完整集合,避免重复选项。
- 在服务器端创建专用接口,返回该Lookup列对应的所有唯一键值对数据,示例代码:
配置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列的筛选逻辑直接基于该独立数据源,而非从主数据集提取。
- 在Grid列配置中,将Lookup列的
优化筛选性能
- 为独立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数据源添加服务器端缓存,避免每次筛选都查询数据库:
额外注意事项
- 确保独立数据源的键值类型与主数据集中的关联字段一致,避免匹配错误。
- 若Lookup数据有更新需求,可设置合理的缓存过期时间,或在数据更新时主动清除缓存,保证选项实时性。
内容的提问来源于stack exchange,提问作者sreimer
相关产品推荐
相关产品推荐

