Webix excelFilter 上的自定义过滤器

问题描述 投票:0回答:1

请提供一个示例,说明如何基于列的格式化文本而不是原始值创建 excelFilter 过滤器。目前,excelFilter 基于原始值进行过滤,这会导致过滤器的多选列表中出现重复项。我们知道 excelFilter 基于 Filter UI,如下所述:https://docs.webix.com/desktop__filter.html

webix
1个回答
0
投票

了解您正在使用的columnConfig 将有所帮助。 例如,是否提供“选项:[]”来将原始值与显示相关联?

但是由于您根本没有任何提示,因此我们要做的就是:将原始值复制到 fieldName_ov 并将显示值放入网格实际显示的数据字段中。

这个 typescript 函数为我们完成了繁重的工作。 您会注意到,我们实际上创建了数据的 _dv 和 _ov “副本”,因此我们可以方便地使用这两个版本。 具有大约 5000 条记录的网格的性能不是问题。

export function propagateDisplayValues<T extends { '^DVPropagated'?:boolean, [key: string]: any; }>(data: T[]): T[] {
let isFirstDataRow: boolean = true; 
data.forEach((element) => {
    if (isFirstDataRow) {
        if (DVPropagatedFlagName in element && element[DVPropagatedFlagName]) {
            //tempting to return here if already true? but not a good idea for diffGram-based grids
            //return data;
        }
        else element[DVPropagatedFlagName] = true;
        isFirstDataRow = false;
    }
    Object.keys(element).forEach((key:string ) => {
        const dvName = `${key}_dv` as keyof T;
        const ovName = `${key}_ov` as keyof T;
        if (dvName in element) {
            if (!(ovName in element)) element[ovName] = element[key];
            element[key as keyof T] = element[dvName] ;
        }
    });
});
return data as T[];

}

© www.soinside.com 2019 - 2024. All rights reserved.