Возврат выбранных строк из диалога с таблицей SlickGrid - PullRequest
0 голосов
/ 26 января 2019

Я создал представление с таблицей SlickGrid в диалоговом окне.И я не мог выяснить, как вернуть выбранные строки (отмеченные флажком) в родительское представление.Я не смог найти ни одного примера, чтобы понять, как это реализовать.Похоже, что когда выделение завершено, в диалоговом окне следует запустить вентиляцию.И в родительском представлении это событие должно быть поймано.Но я не знаю, как это можно сделать.Любая помощь приветствуется

Вот мой код:

Просмотр для диалогового окна:

@ модель IEnumerable @using Newtonsoft.Json

<div>
    <div id="myGrid" style="width:350px;height:500px;"></div>
</div>

<script>
    var md = Html.Raw(JsonConvert.SerializeObject(this.Model));
    var mdd = md;
    var grid;
    var selectedRows = [];
    var chosenItems = [];
    var data = [];
    var options = {
        enableColumnReorder: false,
        multiColumnSort: true,
        editable: true,
        enableCellNavigation: true,
        asyncEditorLoading: false,
        autoEdit: false,
        frozenColumn: 1
    };

    var colms = [          
    {id: 0, name:"Name", field:"Name",width:200 },
    {id: 1, name:"NDB_No", field:"NDB_No", width:40},
    {id: 2, name:"GrpTypeFlag", field:"GrpTypeFlag", width:40 },
    {id: 3, name:"FdGrp_CD", field:"FdGrp_CD", width:40 }
    ];
    var columns = [];

     $(function () {
         for (var i = 0; i < md.length; i++) {
             var d = (data[i] = {});
             d["id"] = i;
             d[0]= md[i].Name;
             d[1]= md[i].NDB_No;
             d[2]= md[i].IdFdGrpFlg;
             d[3]= md[i].FdGrp_CD;
         }

         var checkboxSelector = new Slick.CheckboxSelectColumn({
             cssClass: "slick-cell-checkboxsel"
         });

         columns.push(checkboxSelector.getColumnDefinition());

         for (var i = 0; i < colms.length; i++) {
             columns.push({
                 id: i,
                 name: colms[i].name,
                 field:  i,
                 sortable: true, 
                 width:colms[i].width
             });
         }

         grid = new Slick.Grid("#myGrid", data, columns, options);

         grid.onSort.subscribe(function (e, args) {
             var cols = args.sortCols;
             data.sort(function (dataRow1, dataRow2) {
                 for (var i = 0, l = cols.length; i < l; i++) {
                     var field = cols[i].sortCol.field;
                     var sign = cols[i].sortAsc ? 1 : -1;
                     var value1 = dataRow1[field], value2 = dataRow2[field];
                     var result = (value1 == value2 ? 0 : (value1 > value2 ? 1 : -1)) * sign;
                     if (result != 0) {
                         return result;
                     }
                 }
                 return 0;
             });
             grid.invalidate();
             grid.render();
         });

         grid.setSelectionModel(new Slick.RowSelectionModel({selectActiveRow: false}));
         grid.registerPlugin(checkboxSelector);
         var columnpicker = new Slick.Controls.ColumnPicker(columns, grid, options);
     });
</script>

диалоговое окно вызовов функций:

function dialogUP () {

        document.getElementById("dialog-form").innerHTML = '';
        $("#dialog-form").dialog({
            autoOpen: true,
            position: { my: "right+350 bottom-100" },
            width: 490,
            height: 570,
            resizable: false,
            title: foodSourceName + ': ' + grpName,
            modal: false,

            open: function () {
                var url = '@Url.Action("TestDialog", "TestAtida")';
                url += '/?grpCD_name=' + grpCD + '=' + foodSourceType;
                $(this).load(url);

            },
            buttons: {
                'Cancel': function () {
                    partialFree = 0;
                        $(this).empty(); 
                        $(this).dialog('close'); 
                        $input.focus().select(); 
                }
            }
        });

    };

1 Ответ

0 голосов
/ 27 января 2019

Похоже, вы используете ASP NET Core MVC.

SlickGrid не имеет встроенных серверных хуков. Вы можете использовать редактор / форматер для столбца флажка, и статус флажка будет просто сохранен в объекте data. Или ваш код может создать список выбранных индексов столбцов, если вы хотите сохранить опубликованную вами конфигурацию столбцов.
Там будет какой-то триггер, чтобы начать сохранение данных, возможно, это когда закрыто диалоговое окно, так что вы должны использовать событие, связанное с HTML, чтобы сделать это.

Вы должны сохранить эти данные на сервере, будь то с помощью AJAX и контроллера API или, возможно, с помощью обычного контроллера и действия POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...