Model view controller 有没有办法在Telerik MVC网格中有条件地显示命令按钮?
我的网格中有一列为命令保留,如下所示:Model view controller 有没有办法在Telerik MVC网格中有条件地显示命令按钮?,model-view-controller,button,telerik,command,Model View Controller,Button,Telerik,Command,我的网格中有一列为命令保留,如下所示: .Columns(c => { c.Command(cmd => { cmd.Edit().ButtonType(GridButtonType.Image); cmd.Delete().ButtonType(GridButtonType.Image); }); ... } 是否有方法根据
.Columns(c =>
{
c.Command(cmd =>
{
cmd.Edit().ButtonType(GridButtonType.Image);
cmd.Delete().ButtonType(GridButtonType.Image);
});
...
}
是否有方法根据当前行中字段的值有条件地显示“删除”按钮?我想这样做:
cmd.Delete().ButtonType(GridButtonType.Image)
.HtmlAttributes((item.HasChildren == true ? new { style = "display: none"} : null));
问题是该项不在此处的范围内,因为它位于模板列中
谢谢。最好使用网格的OnRowDataBound客户端事件来处理这个问题。以下JavaScript应该可以工作:
function onRowDataBound(e) {
if (e.dataItem.HasChildren) {
$(e.row).find('t-grid-delete').remove();
}
}
e变量可用于访问任何字段(因此可以检查HasChildren是否为真),然后只需查看特定行($(e.row))并找到表示删除按钮(t-grid-Delete)的元素即可。上述答案仅适用于Ajax绑定。如果在实例化期间将集合传递到网格中,那么还必须在OnLoad事件中执行类似的操作(因为行实际上不是数据绑定的)
@(Html.Telerik().Grid(Model.org)
.Name(“借用人PopupGrid”)
.Columns(cols=>
{
cols.Bound(b=>b.FirstName);
cols.Bound(b=>b.MiddleName);
cols.Bound(b=>b.LastName);
cols.Bound(b=>b.MailingAddress).Title(“地址”);
cols.Bound(b=>b.MailingCity).Title(“城市”);
cols.Bound(b=>b.MailingState.StateCode).Title(“State”).ClientTemplate(“”);
cols.Bound(b=>b.MailingZipCode;
cols.Bound(b=>b.TelephoneNumberFirst).Title(“电话1”);
cols.Bound(b=>b.TelephoneNumberSecond).Title(“电话2”);
cols.Bound(b=>b.EmailAddress).Title(“电子邮件”);
cols.Command(Command=>
{
command.Edit();
command.Delete();
});
})
.客户事件(事件=>
{
events.OnLoad(“借用者PopupGridOnLoad”);
events.OnRowDataBound(“借用者PopupGridOnRowDatabound”);
})
)
函数借用器PopupGridOnRowDataBound(e){
如果(e.dataItem.BorrowerId==BorrowereId | | e.dataItem.BorrowerId==borrowerTwoId){
$(e.row).find('.t-grid-delete').remove();
}
}
函数借用器PopupGridOnLoad(e){
var grid=$('#借用者PopupGrid')。数据('tGrid');
grid.$rows().each(函数(索引,行){
var dataItem=grid.dataItem(行);
如果(dataItem.BorrowerId==BorrowereId | | dataItem.BorrowerId==borrowerTwoId){
row.find('.t-grid-delete').remove();
}
});
}
看起来像类选择器,在这种情况下应该是“.t-grid-delete”howcheng-我在OnLoad事件中尝试了您的代码,但是grid.dataItem(行)返回未定义的。在我最初编写本文的五个月内,我的jQuery变得更好了,所以我更新了代码示例,使其更加优雅。empo,我不知道您在做什么,但是如果您的网格中有数据,这真的应该起作用。如果您仍然有问题,请发布代码。我必须切换到Ajax绑定f或者其他原因,但是像你这样迭代每一行对我来说是有意义的。谢谢你更新它。当然它会帮助别人。
@(Html.Telerik().Grid<Borrower>(Model.Borrowers)
.Name("BorrowersPopupGrid")
.Columns(cols =>
{
cols.Bound(b => b.FirstName);
cols.Bound(b => b.MiddleName);
cols.Bound(b => b.LastName);
cols.Bound(b => b.MailingAddress).Title("Address");
cols.Bound(b => b.MailingCity).Title("City");
cols.Bound(b => b.MailingState.StateCode).Title("State").ClientTemplate("<#= MailingState == null ? '' : MailingState.StateCode#>");
cols.Bound(b => b.MailingZipCode;
cols.Bound(b => b.TelephoneNumberFirst).Title("Phone 1");
cols.Bound(b => b.TelephoneNumberSecond).Title("Phone 2");
cols.Bound(b => b.EmailAddress).Title("Email");
cols.Command(command =>
{
command.Edit();
command.Delete();
});
})
.ClientEvents(events =>
{
events.OnLoad("BorrowersPopupGridOnLoad");
events.OnRowDataBound("BorrowersPopupGridOnRowDataBound");
})
)
function BorrowersPopupGridOnRowDataBound(e) {
if (e.dataItem.BorrowerId == borrowerOneId || e.dataItem.BorrowerId == borrowerTwoId) {
$(e.row).find('.t-grid-delete').remove();
}
}
function BorrowersPopupGridOnLoad(e) {
var grid = $('#BorrowersPopupGrid').data('tGrid');
grid.$rows().each(function(index, row) {
var dataItem = grid.dataItem(row);
if (dataItem.BorrowerId == borrowerOneId || dataItem.BorrowerId == borrowerTwoId) {
row.find('.t-grid-delete').remove();
}
});
}