Ag grid Ag Grid QuickFilter以编程方式更改搜索列
我需要一个快速搜索过滤器,用户可以选择哪些列被搜索。我没有成功地实施这种行为。 我试过这个:Ag grid Ag Grid QuickFilter以编程方式更改搜索列,ag-grid,Ag Grid,我需要一个快速搜索过滤器,用户可以选择哪些列被搜索。我没有成功地实施这种行为。 我试过这个: this.columns.forEach(column=>{ if (this.globalSearchSelectedColumns.indexOf(column.field)>-1) column.getQuickFilterText = (params)=> params.value.name; else column.getQui
this.columns.forEach(column=>{
if (this.globalSearchSelectedColumns.indexOf(column.field)>-1) column.getQuickFilterText = (params)=> params.value.name;
else column.getQuickFilterText = ()=> '';
});
this.grid.api.setColumnDefs(this.columns);
this.grid.api.onFilterChanged();
this.grid.api.resetQuickFilter();
其中this.columns是columns defs,this.grid是gridOptions,this.globalSearchSelectedColumns是按column.field搜索的选定列。为了有选择地应用
quickFilter
表单ag网格,您应该重写columnDef
的属性getQuickFilterText
,通过将其设置为返回空字符串的函数,如下所示:
gridColumnApi
colDef
getQuickFilterText
属性disableFilterCol
,它可以如下所示:
disableFilterCol = () => {
var col = this.gridColumnApi.getColumn("athlete");
var colDef = col.getColDef();
colDef.getQuickFilterText = () => "";
console.log("disable Athlete");
};
this.grid.columnApi.getAllColumns().forEach(column=>{
let def = column.getColDef();
if (this.globalSearchSelectedColumns.indexOf(def.field)>-1) def.getQuickFilterText = undefined;
else def.getQuickFilterText = ()=> '';
});
this.grid.api.onFilterChanged();
调用后,quickFilter
将应用于您的数据网格,不包括atternate
列
我在ReactJS上为你创建了。
您可以改进选择要依赖于进行筛选的多个列的方式
我想在您的例子中,您可以尝试从一开始就为
colDef
的任一定义添加setgetQuickFilterText=()=>“”
,并让用户启用特定列,您可以将它们的getQuickFilterText
属性设置为未定义,以便在它们之间提供排序。我认为这里的问题在于设置更新的列定义。你能试试这个吗-
let newColDef= [];
this.columns.forEach(column=>{
if (this.globalSearchSelectedColumns.indexOf(column.field)>-1)
column.getQuickFilterText = (params)=> params.value.name;
else column.getQuickFilterText = ()=> '';
newColDef.push(column);
});
this.grid.api.setColumnDefs(newColDef);
this.grid.api.onFilterChanged();
this.grid.api.resetQuickFilter();
this.grid.api.refreshHeader();
Ag grid更新了自v19.1以来检测列变化的方法更多细节 根据文件--> 设置新列时,网格将与当前列进行比较,并计算出哪些>列是旧列(要删除)、哪些>列是新列(新) 列已创建)或保留(保留的列将保持其状态 包括位置、过滤器和排序) 列定义的比较在1)对象引用比较和2)上完成 列ID,例如colDef.colId。如果对象 引用匹配,或列ID匹配,然后网格处理 列作为同一列
Ag网格团队还积极致力于解决v20.1的这个问题。您可以根据nakhodkiin解决方案在上跟踪我的代码,如下所示:
disableFilterCol = () => {
var col = this.gridColumnApi.getColumn("athlete");
var colDef = col.getColDef();
colDef.getQuickFilterText = () => "";
console.log("disable Athlete");
};
this.grid.columnApi.getAllColumns().forEach(column=>{
let def = column.getColDef();
if (this.globalSearchSelectedColumns.indexOf(def.field)>-1) def.getQuickFilterText = undefined;
else def.getQuickFilterText = ()=> '';
});
this.grid.api.onFilterChanged();
它正在工作 这个解决方案不起作用,我不想投反对票,但我错投了有用的票,这是不正确的。删除赞成票的唯一方法就是投反对票。很抱歉。