Javascript ASP.NETMVC中带文本和值的自动完成文本框的剑道网格过滤器

Javascript ASP.NETMVC中带文本和值的自动完成文本框的剑道网格过滤器,javascript,asp.net-mvc,kendo-ui,kendo-grid,Javascript,Asp.net Mvc,Kendo Ui,Kendo Grid,我正在尝试为我的剑道网格创建一个网格过滤器,该列显示一个ID值,我希望过滤器根据文本进行搜索 例如:列有雇员ID,我想用雇员名称搜索网格,但雇员名称不是列。这是符合要求的 我已经设法使自动完成工作并加载员工姓名,但如何获取员工ID并过滤网格 我的示例代码: 函数匹配{ element.kendoAutoComplete{ dataTextField:Name, dataValueField:employeeID, 最小长度:3, 过滤器:包含, 数据源:{ 是的, 对,, 运输:{ 阅读:@U

我正在尝试为我的剑道网格创建一个网格过滤器,该列显示一个ID值,我希望过滤器根据文本进行搜索

例如:列有雇员ID,我想用雇员名称搜索网格,但雇员名称不是列。这是符合要求的

我已经设法使自动完成工作并加载员工姓名,但如何获取员工ID并过滤网格

我的示例代码:

函数匹配{ element.kendoAutoComplete{ dataTextField:Name, dataValueField:employeeID, 最小长度:3, 过滤器:包含, 数据源:{ 是的, 对,, 运输:{ 阅读:@Url.ActionFetch,abccontroller, 类型:GET, 数据类型:json, parameterMap:功能数据、操作{ 如果操作===读取{ 返回{ 文本:data.filter.filters[0]。值 }; } } } } }; } @Html.Kendo.Grid .姓名ABC .DataSourcedataSource=>dataSource AJAX .Modelmodel=>model.Idi=>i.id .Readread=>read.ActionLoad,abccontroller .第100页 .Filterablefilter=>filter.Enabledtrue .Pageablepager=>pager.Enabledtrue .ResizeableResize=>resize.Columnstrue .Columnscolumns=> { columns.Boundm=>m.employeeID.titleemployeename.Filterablef=>f.UIempFilter.Extrafalse; }
添加一个自动完成选择处理程序,该处理程序将选择的id作为过滤器应用于网格。在本例中,我不允许清除自动完成以导致读取所有查找数据

事情可能有点棘手,因为autocomplete允许输入,组件的值不一定是下拉列表中特定项对应的值

// autocomplete declaration
...
filtering: ac_Filtering,
change: ac_Change,
...


function ac_Filtering(e) {@* prevent autoComplete 'clear' from loading all remote data *@
    if (!e.filter.value) {@* if there is no filter value, clear has occurred and no further action should take place *@
        e.preventDefault();
    }
}

function ac_Change(e) {
    @* check if value is in dataSource *@
    var ac_value = this.value(); // should be the name showing in ac textbox, if not small tweak here
    var j = -1;
    for (var i = 0; i < this.dataSource.total(); i++) {
        if (this.dataSource.at(i).get('Name') == ac_value) {
            j = i;
        }
    }

    if (j == -1) return; // ac value is not yet a single employee

    // apply filter to grid data source here
    var grid = $("#abc").data("kendoGrid");
    var chosenId = this.dataSource.at(j).get('employeeID')
    grid.dataSource.filter(
      [
        { field: "employeeID", operator: "equals", value: chosenId }
      ]
    );

}

由于没有看到更多的应用程序框架,我推测autocomplete组件将位于网格之外或工具栏区域。

嘿,谢谢,解决方案有所帮助,但我使用了Select事件而不是change事件,change event thru error at this.value,但我还有一个问题,如何禁用filter按钮,因为如果有人点击它,它会抛出一个错误?如何隐藏过滤器按钮: