【问题标题】:How to enable create, while also disabling edit for a Kendo Grid如何启用创建,同时禁用 Kendo Grid 的编辑
【发布时间】:2013-03-01 13:33:39
【问题描述】:

是否可以只在剑道网格中插入新记录,但禁用编辑记录?

我能做的最好是 onDataBound 删除 JavaScript 中的“编辑”按钮。 我尝试设置Editable(ed => ed.Enabled(false)),但在运行时出现错误。

@(Html.Kendo().Grid(Model)    
    .Name("Grid" + guid)
    .HtmlAttributes(new { style = "margin:20px" })
    .Columns(columns =>
    {
        columns.Bound(p => p.Id).Hidden(true);
        //a few more columns

        columns.Command(command =>
            {
                command.Edit().Text(Resources.KendoEdit).UpdateText(Resources.KendoUpdateText).CancelText(Resources.KendoCancelText);
                command.Destroy().Text(Resources.KendoDestroy);
            }).Title(Resources.KendoCommands).Width(180);

    })
    .ToolBar(toolbar => toolbar.Create().Text(Resources.KendoToolbarCreate))
    .Editable(editable => editable
        //.Enabled(false)
        .Mode(GridEditMode.InLine)
        .DisplayDeleteConfirmation(false)
    )
    .DataSource(dataSource => dataSource
        .Ajax()
        .ServerOperation(false)
        .Events(events => events.Sync("sync").Error("error"))
        .Model(mod => mod
            .Id(p => p.Id)
        )
        .Model(mod => mod
            .Field(p => p.OldRoleId).Editable(false)
        )

        .Read(read => read.Action("ChangeRole_Read", "ChangeRole"))
        .Create(update => update.Action("ChangeRole_Create", "ChangeRole"))
        .Update(update => update.Action("ChangeRole_Update", "ChangeRole"))
        .Destroy(update => update.Action("ChangeRole_Destroy", "ChangeRole"))
    )
    .Sortable()
    .Filterable(filterable => filterable
        .Extra(true)
        .Operators(operators => operators
            .ForString(str => str.Clear()
                .StartsWith(Resources.KendoFilterStartsWith)
                .IsEqualTo(Resources.KendoFilterIsEqualTo)
                .IsNotEqualTo(Resources.KendoFilterIsNotEqualTo)
                .Contains(Resources.KendoFilterContains)
                .DoesNotContain(Resources.KendoFilterDoesNotContain)
                .EndsWith(Resources.KendoFilterEndsWith)
            )
        )
        .Messages(mess => mess
            .Info(Resources.KendoFilterMsgInfo)
            .And(Resources.KendoFilterMsgAnd)
            .Or(Resources.KendoFilterMsgOr)
            .Filter(Resources.KendoFilterMsgFilter)
            .Clear(Resources.KendoFilterMsgClear)
        )
    ) 
    .Scrollable()
    .Pageable(pg => pg
        .Refresh(true)
        .Messages(ms => ms
            .First(Resources.KendoPageableFirst)
            .Last(Resources.KendoPageableLast)
            .Next(Resources.KendoPageableNext)
            .Previous(Resources.KendoPageablePrevious)
            .Empty(Resources.KendoPageableEmpty)
            .Display(Resources.KendoPageableDisplay)
        )
    )
    .Events(ev => ev
        .Edit("edit")
        .Save("save")
        .DataBound("dataBound")
    )
)

【问题讨论】:

  • 您能否提供一个代码示例来说明您如何配置网格?你遇到了什么错误?
  • 您使用什么编辑模式?根据您的设置有不同的方法。
  • 这是有问题的部分:.Editable(editable => editable .Enabled(false) .Mode(GridEditMode.InLine) .DisplayDeleteConfirmation(false) ) 它禁用编辑(不可点击),但:不会删除“编辑”按钮。我想删除“编辑”按钮。正如我所说,我能做的最好的就是用 JQ 删除它。更重要的是,如果我离开 .Enabled(false),而不是尝试创建新记录时,我会收到此错误:此请求已被阻止,因为敏感信息可能会在 GET 请求中使用时泄露给第三方网站...跨度>
  • 该错误是由 .NET 阻塞 JSON GET 请求引起的。您可以通过将 JsonRequestBehavior 参数添加到控制器操作返回的 JsonResult 来修改控制器操作以接受这些操作。
  • @nukefusion 是的,但是为什么设置 .Enabled(false) 会导致这个错误?

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


【解决方案1】:

唯一的方法是将编辑按钮的可见性设置为无:

<style>
    #yourgridid .k-grid-edit
    {
        display: none;
    }
</style>

【讨论】:

  • 完成这项工作的唯一答案。谢谢。
【解决方案2】:

如果没有您用于初始化网格的代码,很难回答,但我要试一试。如果我没记错的话,你必须明确告诉 Kendo 添加一个带有编辑/删除按钮的列,如下所示:

.Columns(columns =>
        {
            columns.Bound(m => m.Whatever);
            columns.Command(command =>
            {
                command.Edit();
                command.Destroy();
            });
        })

因此,如果您在列定义中确实有此或类似内容,则将其删除将摆脱编辑/删除,但将添加按钮保留在网格的顶部栏中。

如果这不是您的编辑/删除按钮的设置方式,如果您发布网格代码,我很乐意修改我的答案。

【讨论】:

  • 是的,这就是我初始化网格的方式。但是,如果我在单击添加新记录时删除 command.Edit();,我会收到有关使用 GET 请求的错误。好的,我将JsonRequestBehavior.AllowGet 放在我的控制器中(我真的不想要,但如果没有其他方法也没关系)并且没有更多错误,但现在“保存”和“取消”按钮不存在时添加新记录,只有“删除”按钮。
  • 很抱歉,除非您像我们要求的那样发布您的整个网格代码,否则我无能为力了。我需要一些方法来复制问题。
【解决方案3】:

我遇到了同样的问题。

到目前为止,我唯一的解决方法是使用弹出编辑并从网格中删除编辑命令按钮。现在只需自定义编辑器模板即可。

@(Html.Kendo().Grid<xxxxViewModel>()
        .Name("xxxx")
        .Columns(columns =>
        {            
            .........

            columns.Command(command => { command.Destroy().Text("Del"); }).Width(80);
        })
        .ToolBar(commands => { 
            commands.Create();
        })
        .Pageable()
        .Editable(editable => editable.Mode(GridEditMode.PopUp))
        .Sortable()
        .Scrollable()
        .Filterable()       
        .Events(events => {
            //events.Save("xxxx");
        })
        .HtmlAttributes(new { style = "height:700px" })          
        .DataSource(dataSource => dataSource
            .Ajax()
            .Events(events => events.Error("error"))
            .Model(model =>
            {
                model.Id(p => p.xxxx);
                model.Field(p => p.xxxx).Editable(false);
            })
            .Create(create => create.Action("xxxx", "xxxx"))
            .Read(read => read.Action("xxxx", "xxxx"))            
            .Destroy(destroy => destroy.Action("xxxx", "xxxx"))                
        )
)

【讨论】:

  • 这是正确的答案,省了我更多的头发拉扯。缺点是你会弹出而不是创建内联,但我可以忍受。此外,这种“无法在没有编辑的情况下创建行内联”似乎是一个错误。
【解决方案4】:

此修复在下面的注释行中:

.Columns(cols =>
{

    cols.Bound(c => c.name).Width(300);
    cols.Bound(c => c.dateBuilt);

    cols.Command(cmd =>
    {
        cmd.Select();
        //cmd.Edit();//This is the part to comment out if u want to disable edit
        cmd.Destroy();
    });
})

【讨论】:

  • tnx 但是:是的,这会禁用编辑,但也会禁用插入。现在,当我尝试插入新记录时,我没有保存和取消按钮,只有删除按钮。还有什么是cmd.Select(); 这什么都不做,只是添加一个我不需要的按钮什么都不做。 :(
【解决方案5】:

我想也像其他人建议你需要删除

command.Edit() 

从您的行中并有一个保存按钮,您可以使用

将其添加到创建旁边的工具栏
toolbar.Save()

干杯, 萨梅赫

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多