从 kendo 网格获取行 ID
Get row ID from kendo grid
我正在尝试从 kendo 网格中的选定行获取 'ObjectID',但目前无法正常工作。
<div class="clearfix">
@(Html.Kendo().Grid<M20_AEK.Models.ContractSettlement>()
.Name("ContractSettlementGrid")
.Editable(editable => editable.Mode(GridEditMode.PopUp))
.Pageable(pageable => pageable.Input(true).Numeric(false))
.Scrollable()
.Selectable()
.Sortable()
.Filterable()
.ColumnMenu()
.Groupable()
.Selectable()
.Columns(columns =>
{
columns.Bound(c => c.ObjectID).Title("ID").Hidden();
columns.Bound(c => c.OPERATOR_OBJECTID).Title("Operator").Width("100px");
columns.Bound(c => c.Year).Title("Year").Width("100px");
columns.Bound(c => c.Month).Title("Month").Width("100px");
columns.Bound(c => c.SETTLEMENT_OBJECTID).Title("Settlement").Width("100px");
columns.Bound(c => c.TECHNOLOGY_OBJECTID).Title("Technology").Width("100px");
columns.Bound(c => c.UPLOAD_SPEED_CLASS_OBJECTID).Title("Upload").Width("100px");
columns.Bound(c => c.DOWNLOAD_SPEED_CLASS_OBJECTID).Title("Download").Width("100px");
columns.Bound(c => c.ObjectID)
.Title("Edit")
.Filterable(false)
.ClientTemplate("<a onclick=\"showDetails(this,'#= ObjectID#')\" href='\#'>Edit</a>");
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(172);
})
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Events(events => events.Error("error_handler"))
.Model(model => model.Id(p => p.ObjectID))
.Read(read => read.Action("LoadSettlementContracts_Read", "SettlementContract"))
.Update(update => update.Action("Save", "SettlementContract"))
.Destroy(update => update.Action("Delete", "SettlementContract"))
)
)
</div>
function showDetails(ObjectID) {
alert(ObjectID);
}
我也尝试过类似的方法,因为我在论坛上找到了一些可能的解决方案。
function showDetails() {
var grid = $("#ContractSettlementGrid").data("kendoGrid");
var selectedRow = grid.select();
var index = selectedRow();
console.log(index);
//this does not work
}
关于如何做到这一点有什么想法吗?
您即将成功!
您不需要为您的按钮使用客户端模板(除非您没有共享其他代码)。您可以将其更改为:
columns.Command(command => command.Custom("Edit").Click("showDetails"));
并制作 showDetails 函数:
<script type="text/javascript">
function showDetails(e) {
e.preventDefault();
var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
//do whatever you need with the dataItem here
console.log(dataItem.ObjectID);
}
</script>
此处的附加信息:https://demos.telerik.com/aspnet-core/grid/custom-command
我正在尝试从 kendo 网格中的选定行获取 'ObjectID',但目前无法正常工作。
<div class="clearfix">
@(Html.Kendo().Grid<M20_AEK.Models.ContractSettlement>()
.Name("ContractSettlementGrid")
.Editable(editable => editable.Mode(GridEditMode.PopUp))
.Pageable(pageable => pageable.Input(true).Numeric(false))
.Scrollable()
.Selectable()
.Sortable()
.Filterable()
.ColumnMenu()
.Groupable()
.Selectable()
.Columns(columns =>
{
columns.Bound(c => c.ObjectID).Title("ID").Hidden();
columns.Bound(c => c.OPERATOR_OBJECTID).Title("Operator").Width("100px");
columns.Bound(c => c.Year).Title("Year").Width("100px");
columns.Bound(c => c.Month).Title("Month").Width("100px");
columns.Bound(c => c.SETTLEMENT_OBJECTID).Title("Settlement").Width("100px");
columns.Bound(c => c.TECHNOLOGY_OBJECTID).Title("Technology").Width("100px");
columns.Bound(c => c.UPLOAD_SPEED_CLASS_OBJECTID).Title("Upload").Width("100px");
columns.Bound(c => c.DOWNLOAD_SPEED_CLASS_OBJECTID).Title("Download").Width("100px");
columns.Bound(c => c.ObjectID)
.Title("Edit")
.Filterable(false)
.ClientTemplate("<a onclick=\"showDetails(this,'#= ObjectID#')\" href='\#'>Edit</a>");
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(172);
})
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Events(events => events.Error("error_handler"))
.Model(model => model.Id(p => p.ObjectID))
.Read(read => read.Action("LoadSettlementContracts_Read", "SettlementContract"))
.Update(update => update.Action("Save", "SettlementContract"))
.Destroy(update => update.Action("Delete", "SettlementContract"))
)
)
</div>
function showDetails(ObjectID) {
alert(ObjectID);
}
我也尝试过类似的方法,因为我在论坛上找到了一些可能的解决方案。
function showDetails() {
var grid = $("#ContractSettlementGrid").data("kendoGrid");
var selectedRow = grid.select();
var index = selectedRow();
console.log(index);
//this does not work
}
关于如何做到这一点有什么想法吗?
您即将成功!
您不需要为您的按钮使用客户端模板(除非您没有共享其他代码)。您可以将其更改为:
columns.Command(command => command.Custom("Edit").Click("showDetails"));
并制作 showDetails 函数:
<script type="text/javascript">
function showDetails(e) {
e.preventDefault();
var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
//do whatever you need with the dataItem here
console.log(dataItem.ObjectID);
}
</script>
此处的附加信息:https://demos.telerik.com/aspnet-core/grid/custom-command