javascript - 显式触发剑道网格的自定义命令

标签 javascript jquery kendo-ui kendo-grid

我有一个带有自定义命令的剑道网格。现在的问题是我想为特定行触发该自定义命令但无法做到这一点。 这是我的代码:

网格:

@(Html.Kendo().Grid<RxConnectEntities.UserDTO>
                ().Name("UserList")
                .Columns(columns =>
                {
                    columns.Bound(p => p.UserID).Visible(false);
                    columns.Command(command => { command.Custom("Select").Click("OnSelectRow"); }).Width("80px");
                    columns.Bound(p => p.LastName).Title("Last Name");
                    columns.Bound(p => p.FirstName).Title("First Name");
                })
                .Filterable(filterable => filterable
                .Extra(false)
                .Operators(operators => operators
                .ForString(str => str.Clear()
                .StartsWith("Starts with")
                .IsEqualTo("Is equal to")
                .IsNotEqualTo("Is not equal to")
                .Contains("Contains")
                ))
                ).ToolBar(x => x.Template("<a class='k-button k-button-icontext k-grid-export pull-right' title='Export to Excel' data-title='Users'><div class='k-grid-export-image k-icon'></div>Export To Excel</a>"))
                .HtmlAttributes(new { @Style = "height:580px" })
                .Sortable()
                .Groupable()
                .Scrollable()
                .Events(events => events.DataBound("onDataBound").ColumnShow("onColumnShow"))
                .Pageable(p => p.PageSizes(new int[] { 10, 20, 30, 40, 50 }).Enabled(true).Refresh(true))
                .DataSource(dataSource => dataSource
                .Ajax().ServerOperation(true).PageSize(20)
                .Model(m => m.Id(p => p.PrescriberID))
                .Read(read => read.Action("GetUserList", "User").Data("PassData"))
                ))

Javascript:

function OnSelectRow(e) {
  var grid = $("#UserList").data("kendoGrid");
  var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
  alert("User Detail: " + dataItem.UserID + " " + dataItem.FirstName + " " + dataItem.LastName");
}

现在我有一个文本框和一个按钮,在文本框中用户输入用户 ID,我必须为该用户 ID 触发剑道网格的 onSelectRow 事件。我知道这个技巧

var row = $("#" + gridName).data("kendoGrid").table.find('tr[data-id="' + id + '"]')

但这对我不起作用。它没有给我行变量中的任何内容。

注意:我使用的是 asp.net mvc5 和 c#。

最佳答案

data-id没有放入 <tr> Kendo Grid 的元素。它使用 data-uid相反,它是由 DataSource 生成的 GUID id .

您可以通过执行以下操作获取项目的 uid:

var id = 123; // get the ID from the text box
var gridWidget = $("#" + gridName).data("kendoGrid");
var dataItem = gridWidget.dataSource.get(id);
var uid = dataItem.uid;
var row = .table.find('tr[data-uid="' + uid + '"]');

当然,您可以将按钮单击处理程序简化为:

// called from grid action
function OnSelectRow(e) {
  var grid = $("#UserList").data("kendoGrid");
  var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
  showDetails(dataItem);
}

// called by button outside grid
function OnSelectRowManually() {
  var id = 123; // get the ID from the text box
  var dataItem = $("#UserList").data("kendoGrid").dataSource.get(id);
  showDetails(dataItem);
}

// reusable code to show details
function showDetails(dataItem) {
  alert("User Detail: "
    + dataItem.UserID
    + " "
    + dataItem.FirstName
    + " "
    + dataItem.LastName");
}

关于javascript - 显式触发剑道网格的自定义命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26734769/

相关文章:

javascript - 是否可以有多个剑道网格实例

javascript - jQuery 字符计数 - 函数未被调用

OAuth 的 Javascript 范围问题

javascript - jQuery 选择父项不属于给定类的项

javascript - Javascript 提供了哪些调试日志记录工具?

javascript - 如何将当前元素传递给 Knockout.js 绑定(bind)中的 Javascript 函数?

javascript - 动态创建的元素上的事件绑定(bind)?

javascript - 绑定(bind) Kendo Grid 与 Knockout : will config in javascript work with

javascript - 如果初始值不存在,则选择第一项

javascript - 如何删除chartJS中的彩色矩形(数据集标签)