Kendo Grid Custom comboBox Filter

时间:2014-01-22 10:39:16

标签: asp.net-mvc-4 kendo-ui kendo-grid kendo-combobox

我有网格,它会将数据加载为可过滤的组合框,所以我需要使用可过滤的组合框为此列创建自定义过滤器。

我创建了组合框并将其分配给列过滤器UI。我的问题是当组合框从控制器读取数据时,它不会将过滤器文本发送到控制器。

<script type="text/javascript">
function outletFilter(element) {
        debugger;
                    element.kendoComboBox({
                     dataTextField: "OutletNameE",
                        dataValueField: "OutletID",
                    autoBind: false,
                     minLength: 1,
                        dataSource: {
                        serverFiltering: true,
                        transport: {
                            read: "@Url.Action("GetOutletsCombo")"
                           }
                           },                                                         
                        optionLabel: "--Select Value--"
                    });
                    }

    </script>

 @(Html.Kendo().Grid<Spine.ERP.ViewModel.AccountReceivableOutletViewModel>()
    .Name("ARDetails_OutletGrid")
    .Columns(columns =>
    {

        columns.Bound(p => p.AccountReceivableID).Hidden();
        columns.Bound(p => p.AccountReceivableOutletID);
        columns.Bound("Outlet.OutletName")
           .EditorTemplateName("OutletForeignKeyEditor")
            .ClientTemplate("<a>#=OutletID ##=OutletID? '-' : ' ' ##=OutletID ? 

Outlet.OutletName :  ' ' #</a>")
.Filterable(filter => filter.UI("outletFilter"));    
        })

这是我的控制器功能

public ActionResult GetOutletsCombo(string text)
        {
            if (text == null)
                text = "";
            var result = new List<OutletViewModel>();
            var Outlets = outletRepository.FilterOnID("Outlet", new string[] { "OutletID", "OutletNameE" }, text).ToList();
            result = (from outlet in Outlets
                      select new OutletViewModel
                      {
                          OutletID = outlet.OutletID,
                          OutletNameE = outlet.OutletNameE,
                          OutletNameA = outlet.OutletNameA
                      }).ToList();
            return Json(result, JsonRequestBehavior.AllowGet);
        }

1 个答案:

答案 0 :(得分:3)

首先,如果执行“读取”,它不会向控制器发送任何其他值,因此在“public ActionResult GetOutletsCombo(string text)”中,您不会在“text”中获得任何值。

对于服务器过滤,您可以在下一页上看到kendo的演示

http://demos.kendoui.com/web/combobox/serverfiltering.html

就我的问题而言,你想要做一个剑道网格,在那里你想要一个组合框来过滤网格中的数据。在这种情况下,您可以在Kendo的网站上查看类似的演示

http://demos.kendoui.com/web/grid/toolbar-template.html

对于过滤器菜单,您可以在ASP.NET MVC

下的kendo上查看
http://demos.kendoui.com/web/grid/filter-menu-customization.html

希望您能从这些示例中解决您的问题。万一你不能在这篇文章下面发表评论。我会再次尝试帮助你。