0

私はこの剣道グリッドを持っています

@(Html.Kendo().Grid<TekstenViewModel.Tekst>()
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Template(@<text></text>).ClientTemplate("<input type='checkbox'/>").Width(10).Hidden(!Model.Administrator);
        columns.Bound(product => product.Naam).Width(125).ClientTemplate("<div id='editorDiv'><div class='input'>#=Naam#</div><div class='editor'>" + 
            Html.WebCore().LinkButton(type: ButtonType.MeerActies, htmlAttributes: new { onclick = "openPopupDemo('#: Naam #', '#: ID #', 'Naam')" }));

        columns.Bound(product => product.Waarde).Width(125).ClientTemplate("<div id='editorDiv'><div class='input'>#=Waarde#</div><div class='editor'>" +
            Html.WebCore().LinkButton(type: ButtonType.MeerActies, htmlAttributes: new { onclick = "openPopupDemo('#: Waarde #', '#: ID #', 'Waarde')" }));

        columns.Bound(product => product.Opmerking).Width(250).ClientTemplate("<div id='editorDiv'><div class='input'>#=Opmerking#</div><div class='editor'>" + 
            Html.WebCore().LinkButton(type: ButtonType.MeerActies, htmlAttributes: new { onclick = "openPopupDemo('#: Opmerking #', '#: ID #', 'Opmerking')" }));

        columns.Template(@<text></text>).ClientTemplate("<div id='deleteDiv'><div class='delete'><a class=\"delete iconBtn\" onclick=\"deleteResourceItem(#: ID #, '#: Naam #')\"></a></div></div>").Width(10).Hidden(!Model.Administrator);
    })
    .Pageable()
    .Sortable()
    .Filterable()
    .Events(events => events.Edit("onCellEdit"))
    .Groupable()
    .Navigatable()
    .Editable(editable => editable.Mode(GridEditMode.InCell).DisplayDeleteConfirmation(false))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Batch(true)

        .Model(model =>
        {
            model.Id(product => product.ID);
            model.Field(product => product.Naam).Editable(Model.Administrator);
            model.Field(product => product.Opmerking).Editable(Model.Administrator);
            model.Field(product => product.Waarde).Editable(!Model.ReadOnly);
            model.Field(product => product.RESOURCE_SET_ID).DefaultValue(Model.SetID);
            model.Field(product => product.Type).DefaultValue(Domain.Agromilieu2.Common.Objects.Entities.Resources.ResourceType.GLOBAL_RESOURCES);
            model.Field(product => product.Taal).DefaultValue(Domain.Agromilieu2.Common.Agromilieu2Constants.Resources.DEFAULT_TAAL_CODE);
        })
        .Create(create => create.Action(MVC.BeheerTeksten.ActionNames.ResourceItems_CreateUpdate, MVC.BeheerTeksten.Name))
        .Read(read => read.Action(MVC.BeheerTeksten.ActionNames.ResourceItems_Read, MVC.BeheerTeksten.Name, new { setID = Model.SetID }).Data("onReadAdditionalData"))
        .Update(update => update.Action(MVC.BeheerTeksten.ActionNames.ResourceItems_CreateUpdate, MVC.BeheerTeksten.Name))
        .Destroy(destroy => destroy.Action(MVC.BeheerTeksten.ActionNames.ResourceItems_Delete, MVC.BeheerTeksten.Name))
    )
    )

@Html.WebCore().Popup.Remove("confirmResourceItemPopup", "Verwijderen resource item", "")

グリッドの写真はこちら ここに画像の説明を入力

点線のボタンは剣道エディタを開きます。

プロジェクトでクレーム認証を使用しています。読み取り専用と管理者のアクセス許可があります。読み取り専用権限を持っている場合、エディターは無効になります。

これは私の編集者です。

@Html.WebCore().Popup.CustomButtons("popupDemo", "Waarde", Html.Kendo().Editor().Name("waardeEditor").HtmlAttributes(new { @class = "editorStyle" }).Tools(tools => tools
    .Clear()
    .Bold().Italic().Underline().Strikethrough()
    .JustifyLeft().JustifyCenter().JustifyRight().JustifyFull()
    .InsertUnorderedList().InsertOrderedList()
    .Outdent().Indent()
    .CreateLink().Unlink()
    .InsertImage()
    .SubScript()
    .SuperScript()
    .TableEditing()
    .ViewHtml()
    .Formatting()
    .FontName()
    .FontSize()
    .FontColor().BackColor()        
).ToHtmlString(), new[]{new PopupButton("popupDemoAnnuleren", "Cancel", false),new PopupButton("popupDemoOk", "OK")})

これは、ReadOnly が true の場合に無効にするコードです。

 $(document).ready(function () {
            if ('@Html.Raw(Json.Encode(Model.ReadOnly))' == "true") {
                $("#waardeEditor").data("kendoEditor").body.contentEditable = false;
            }
        });

したがって、これは、どのボタンをクリックしても、エディターでの編集を無効にします。

現在、ユーザーが読み取り専用以上のアクセス許可を持っているが、管理者でもない状況があります。つまり、彼は Waarde 列のみを編集および保存できます。

他の列のボタンを無効にする方法はありますが、私のアプリケーションの要件では、ユーザーがエディターで Naam 列と Opmerking 列のセルの内容を開くことができるが、編集することはできないと指定されています。 Waarde 列の内容を開いて編集できるようにする必要があります。

そして、これは私が立ち往生しているところです。Waarde 列のいずれかのボタンをクリックする場合を除いて、すべての列でエディターを無効にする方法がわかりません。

4

1 に答える 1

0

やったよ。思ったより簡単でした。エディターを開くために使用した onPopupDemo メソッドを使用しました。

これがコードです。

 var selectedGridRowID = 0;
        var selectedGridColumnName;
        function openPopupDemo(gridCellContent, gridIdentifier, columnIdentifier) {
            var editor = $("#waardeEditor").data("kendoEditor")

            if ('@Html.Raw(Json.Encode(Model.ReadOnly))' == "false" && '@Html.Raw(Json.Encode(Model.Administrator))' == "false" && columnIdentifier != "Waarde") {
                editor.value(gridCellContent)
                editor.body.contentEditable = false;
            }
            else {
                editor.value(gridCellContent)
                editor.body.contentEditable = true;
            }

            domain.WebCore.popup.show("popupDemo");
            selectedGridRowID      = gridIdentifier;
            selectedGridColumnName = columnIdentifier;
        };
于 2014-08-22T09:05:34.493 に答える