【发布时间】:2016-08-18 06:05:08
【问题描述】:
我有一个包含多列的网格。
说Id(integer),Name(string)等。
更改事件对于名称列工作正常。但对于 ID 列它不起作用(更改事件未触发 kendo 中的数字列)。
我已经完成了客户端脚本。但我希望此功能位于服务器端(Razor)。
我是 Kendo UI 的新手,非常感谢任何有关如何执行此操作的帮助。
我在下面附上我的代码:
@(Html.Kendo().Grid(Model).Name("ViewDataGrid")
.Columns(columns =>
{
columns.Bound(c => c.Id).Title(" ID").Width(150);
columns.Bound(c => c.Name).Title(" Name").Width(150);
})
.HtmlAttributes(new { style = "height: auto; width: 2200px" })
.Filterable(i => i.Mode(GridFilterMode.Menu | GridFilterMode.Row))
.Sortable(s => s.AllowUnsort(false).SortMode(GridSortMode.MultipleColumn))
.Selectable(selecting => selecting.Enabled(true))
.Pageable(r => r.PreviousNext(true).PageSizes(new int[] { 10, 20, 30, 40, 50, 100 }))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.ServerOperation(false)
.Events(e => e.Change("call"))
))
function call(e) {
debugger;
var filterlength = e.sender.filter.arguments[0].filters.length;
var ds = $("#ViewDataGrid").data("kendoGrid");
$filter = new Array();
for (var i = 0; i < filterlength; i++) {
if (e.sender.filter.arguments[0].filters[i].field == "Id")
$filter.push({ field: e.sender.filter.arguments[0].filters[0].field, operator: "eq", value: parseInt(e.sender.filter.arguments[0].filters[0].value) });
else
$filter.push({ field: e.sender.filter.arguments[0].filters[0].field, operator: "contains", value: e.sender.filter.arguments[0].filters[0].value });
}
$("#ViewDataGrid").data("kendoGrid").dataSource._filter = $filter;
$("#ViewDataGrid").data("kendoGrid").dataSource.sync();
}
模型.CS
public int Id { get; set; }
public string Name { get; set; }
控制器
public ActionResult Index()
{
List<GridData> dataList = new List<GridData>();
GridData data1 = new GridData();
data1.Id = 9191919;
data1.Name = "XYZ";
dataList.Add(data1);
return View(dataList);
}
编辑后: 更改事件未触发。 你能帮我解决我的问题吗?
@(Html.Kendo().Grid(Model)
.Name("ViewDataGrid")
.ToolBar(toolBar =>
{
toolBar.Template(
@<Text>
<input type="search" id="searchBox" class="SearchRight SearchTopMargin" />
<b class="FloatRight SearchTopMarginExtra">Search the grid: </b>
</Text>);
})
.HtmlAttributes(new { style = "height: auto; width: 2200px" }) .Filterable(i => i.Mode(GridFilterMode.Menu | GridFilterMode.Row))
.Sortable(s => s.AllowUnsort(false).SortMode(GridSortMode.MultipleColumn))
.Selectable(selecting => selecting.Enabled(true))
.Events(e => e.Change("call"))
.Pageable(r => r.PreviousNext(true).PageSizes(new int[] { 10, 20, 30, 40, 50, 100 }))
.DataSource(dataSource => dataSource
.Custom()
.Type("aspnetmvc-ajax")
.PageSize(20)
.ServerPaging(false)
.ServerSorting(false)
.ServerFiltering(false)
.Transport(transport => transport
.Read(read => read.Action("Read", "Index"))
)
.Schema(schema => schema
.Data("Data")
.Total("Total")
.Errors("Errors")
.Model(model =>
{
model.Id("Id");
model.Field("Id", typeof(int));
model.Field("Name", typeof(string));
})
)
)
)
【问题讨论】:
-
请分享您的代码。
-
您的数据源设置/配置如何?
-
我们只是从控制器传递静态数据。请同时找到控制器代码。
-
好吧,这可能是一个长镜头,但这最终为我做了,而不是直接传递数据源,我最终还在数据源的配置中指定了“模式”。我遵循了 Telerik 的自定义数据源 API 参考:docs.telerik.com/kendo-ui/aspnet-mvc/custom-datasource。希望对你有帮助
-
如果我喜欢这个剑道网格更改事件不会触发。请帮帮我。
标签: javascript jquery asp.net-mvc kendo-grid