dx-react-grid 过滤器选项 'equal' 不工作
dx-react-grid filter option 'equal' not working
我用 dx React Grid 创建了一个 table,在其中一列中,数据在 DataProvider
的帮助下显示为彩色空块,每种颜色对应一个1、2、3、4 或 5 中的数字。
这是我的网格实现片段:
<Grid rows={rows} columns={columns}>
<FilteringState />
<SearchState />
<RatingHeatmapProvider for={skillColumns} />
<IntegratedFiltering />
//....
<Table />
<TableHeaderRow />
<Toolbar />
<SearchPanel />
<TableFilterRow showFilterSelector iconComponent={FilterIcon} />
//....
</Grid>
除过滤器选项 ['equal', 'notEqual']
外,所有其他选项(例如 greaterThan
、contains
等)都有效。
其他列中显示文本值的所有选项都有效。
在下图中,前 4 列对应于显示彩色块的列,最后一列是另一列,直接显示文本值。如您所见,filter = 3
应该给我看绿色方块,但没有。即使 greaterThanOrEqual
或 lessThanOrEqual
也有效(图中未显示)
我该如何解决这个问题?
[编辑]:注意:正如我刚刚检查的那样,即使没有 DataProvider 和带状列,即直接显示数字,这个问题也存在。
我想你在数据库中将 'Rating' 存储为 'number',是吗?当 Grid 处理 'equal'/'notEqual' 过滤操作时,它比较来自过滤器编辑器 (string
) 的值和来自行 (number
) 的值。它会导致所描述的问题。此问题已 fixed。该修复程序将在下一次更新中提供。
目前,您可以使用自定义谓词作为解决方法:
filteringColumnExtensions: [
{
columnName: "comumn_name",
predicate: (value, filter) => {
if (filter.operation === "equal") {
return String(value) === filter.value;
}
// process other filter operations here...
}
}
]
Demo.
我用 dx React Grid 创建了一个 table,在其中一列中,数据在 DataProvider
的帮助下显示为彩色空块,每种颜色对应一个1、2、3、4 或 5 中的数字。
这是我的网格实现片段:
<Grid rows={rows} columns={columns}>
<FilteringState />
<SearchState />
<RatingHeatmapProvider for={skillColumns} />
<IntegratedFiltering />
//....
<Table />
<TableHeaderRow />
<Toolbar />
<SearchPanel />
<TableFilterRow showFilterSelector iconComponent={FilterIcon} />
//....
</Grid>
除过滤器选项 ['equal', 'notEqual']
外,所有其他选项(例如 greaterThan
、contains
等)都有效。
其他列中显示文本值的所有选项都有效。
在下图中,前 4 列对应于显示彩色块的列,最后一列是另一列,直接显示文本值。如您所见,filter = 3
应该给我看绿色方块,但没有。即使 greaterThanOrEqual
或 lessThanOrEqual
也有效(图中未显示)
我该如何解决这个问题?
[编辑]:注意:正如我刚刚检查的那样,即使没有 DataProvider 和带状列,即直接显示数字,这个问题也存在。
我想你在数据库中将 'Rating' 存储为 'number',是吗?当 Grid 处理 'equal'/'notEqual' 过滤操作时,它比较来自过滤器编辑器 (string
) 的值和来自行 (number
) 的值。它会导致所描述的问题。此问题已 fixed。该修复程序将在下一次更新中提供。
目前,您可以使用自定义谓词作为解决方法:
filteringColumnExtensions: [
{
columnName: "comumn_name",
predicate: (value, filter) => {
if (filter.operation === "equal") {
return String(value) === filter.value;
}
// process other filter operations here...
}
}
]
Demo.