Изменение порядка столбцов в Jqgrid ColumnChooser не работает - PullRequest
3 голосов
/ 18 апреля 2011

Я новичок в jQuery & jgrid. Я пытаюсь использовать columnchooser для обоих, чтобы позволить пользователю удалить столбцы и изменить порядок столбцов. Удаление и добавление столбцов работают нормально. Но изменение порядка столбцов не работает. Ниже то, что у меня есть в коде.

<head>
    <link rel="stylesheet" type="text/css" media="screen" href="/xxxx/resources/css/jquery/ui-lightness/jquery-ui-1.8.6.custom.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="/xxxx/resources/css/jqgrid/ui.jqgrid.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="/xxxx/resources/css/edi/standard.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="/xxxx/resources/css/jquery/ui-multiselect/ui.multiselect.css" />
    <script type="text/javascript" src="/xxxx/resources/js/jquery/jquery-1.4.4.min.js"></script>
    <script type="text/javascript" src="/xxxx/resources/js/jquery/jquery-ui-1.8.6.custom.min.js"></script>
    <!-- <script type="text/javascript" src="/xxxx/resources/js/jquery/jquery-ui-1.8.11.custom.js"></script>-->
    <script type="text/javascript" src="/xxxx/resources/js/jqgrid/grid.locale-en.js"></script>
    <script type="text/javascript" src="/xxxx/resources/js/jquery/ui.multiselect.js"></script>
    <script type="text/javascript" src="/xxxx/resources/js/jqgrid/jquery.jqGrid.min.js"></script>
    <script type="text/javascript">
        var jq = jQuery.noConflict();
        jq.jgrid.no_legacy_api = false;
    </script>
    <script type="text/javascript" src="/xxxx/resources/js/jqgrid/jquery.jqGrid.min.js"></script> <!-- 3.8.2 version-->
    <!--<script type="text/javascript" src="/xxxx/resources/js/jqgrid/jquery.searchFilter.js"></script>-->
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>XXXX</title>
</head>

Файл ui.multiselect.js уже содержит предложенное исправление.

$.widget("ui.multiselect", {
    options: {
    sortable: true,
    searchable: true,
    doubleClickable: true,
    animated: 'fast',
    show: 'slideDown',
    hide: 'slideUp',
    dividerLocation: 0.6,
    nodeComparator: function(node1,node2) {
        var text1 = node1.text(),
            text2 = node2.text();
        return text1 == text2 ? 0 : (text1 < text2 ? -1 : 1);
    }
}},
destroy: function() {
    this.element.show();
    this.container.remove();
// Modified to work with jquery.ui.1.8
    if ($.Widget === undefined)
        $.widget.prototype.destroy.apply(this, arguments);
    else {
        $.Widget.prototype.destroy.apply(this, arguments);
        return this;
    }}

И я использую столбец выбора, как показано ниже.

jq("#grid").jqGrid('navButtonAdd','#pager',
                   { caption: "Columns",
                     title: "Reorder Columns",
                     onClickButton : function (perm){
                         jq("#grid").jqGrid('columnChooser');
                     }
                   });

Ниже приведено то, что я пробовал до сих пор.

  1. Когда я добавляю {"msel_opts": $.ui.multiselect.defaults} в качестве опции, я получаю неопределенную ошибку JS.
  2. Когда я пытался включить grid.jqueryui.js, получил объект или метод не поддерживается.

Я застрял в этом. Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

3 голосов
/ 19 апреля 2011

Трудно найти ошибку в вашем коде, потому что вы разместили только один фрагмент кода. Возможно, вы пытаетесь добавить кнопку на панели инструментов навигатора относительно navButtonAdd до того, как вы создали панель инструментов навигатора относительно navGrid.

В любом случае, один небольшой рабочий пример здесь может помочь вам найти вашу ошибку.

1 голос
/ 11 мая 2011

Для тех, кто находится в таком же требовании, вы можете рассмотреть мою реализацию columnhooser. Моя Диалоговая Форма Декларации. (Диалоговое окно, которое будет отображаться при нажатии кнопки columnchooser.

Все обязательные поля не будут удалены.

Создание кнопки ColumnChooser для моей сетки.

jq("#grid").jqGrid('navButtonAdd','#pager',{
            caption: "Columns",
            title: "Customize Columns",
            onClickButton : function (){
            /*jq("#grid").jqGrid('columnChooser',{
                height:columnChooserHt
                });*/
                createDialogDiv();
                jq( "#dialog-form" ).dialog('open');
            }
        });

Добавление кнопок «Сохранить» (ОК) и «Отмена» к моему разделу.

jq(function(){
    jq( "#dialog-form" ).dialog({
        autoOpen: false,
        height: 300,
        width: 350,
        modal: true,
        buttons: {
            "OK": function() {
                changeColView();
                jq( "#dialog-form" ).dialog('close');
            },
            Cancel: function() {
                jq( "#dialog-form" ).dialog('close');
            }
        },
        close: function() {
        }
    }); 
});

Функция, которая вставляет имена столбцов в поля выбора, которые необходимо было отобразить в диалоговом окне ColumnChooser.

function createDialogDiv(){
    var colModelDiv = jq("#grid").jqGrid('getGridParam','colModel');
    var colNamesDiv = jq("#grid").jqGrid('getGridParam','colNames');
    //alert(JSON.stringify(colModelDiv));
    //alert(JSON.stringify(colNameDiv));
    var container = document.getElementById('dialog-form');
    //alert(colNamesDiv.length);
    var chckBox="";
    for(i=0;i<colNamesDiv.length;i++){
        if(colModelDiv[i].hidden && colModelDiv[i].hidden == true ){
            chckBox+="<input type='checkbox' id='"+colNamesDiv[i]+"' name='"+colNamesDiv[i]+"' value='"+colModelDiv[i].name+"'>"+colNamesDiv[i]+"</input><br/>";
        }else{
            if(colModelDiv[i].editrules && colModelDiv[i].editrules.required){
                chckBox+="<input type='checkbox' id='"+colNamesDiv[i]+"' name='"+colNamesDiv[i]+"' value='"+colModelDiv[i].name+"' disabled>"+colNamesDiv[i]+"</input><br/>";
            }
            else
                chckBox+="<input type='checkbox' id='"+colNamesDiv[i]+"' name='"+colNamesDiv[i]+"' value='"+colModelDiv[i].name+"' checked>"+colNamesDiv[i]+"</input><br/>";
        }

    }   
    container.innerHTML=chckBox;
}

Наконец, фактический метод, который изменяет столбцы, выбранные из Columnchooser.

function changeColView(){
    var colModelDiv = jq("#grid").jqGrid('getGridParam','colModel');
    var colNamesDiv = jq("#grid").jqGrid('getGridParam','colNames');
    for(i=0;i<colNamesDiv.length;i++){
        var chckBox=document.getElementById(colNamesDiv[i]);
        if(chckBox && chckBox.value && (!(chckBox.checked || chckBox.disabled))){
            jq("#grid").jqGrid('hideCol',chckBox.value);
        }
        if(chckBox && chckBox.checked){
            jq("#grid").jqGrid('showCol',chckBox.value);
        }
    }
    jq("#grid").trigger('reloadGrid');
}

Плз, дайте мне знать ваши мысли по этому поводу.

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