【问题标题】:column re-ordering is not working while appending thead to jqGrid将thead附加到jqGrid时列重新排序不起作用
【发布时间】:2014-09-15 04:53:21
【问题描述】:

我正在使用列选择器来自定义 jqGrid 记录中的列,但我将 <thead> 附加到 jqGrid 以进行对齐,因此我无法用 columnChooser 重新排列我的 jqGrid 列。

我的代码是:

if (success==true) {    
    $("#merror").text('');

    $("#list1").jqGrid("GridUnload")
    $("#list1").jqGrid({
        url:"./controllers/apGetTestData.php?testanzres=1&testsuite="+testsuite+
            "&testcase="+testcase+"&ch="+ch+"&fromdate="+fromdate+
            "&todate="+todate+"&mmss="+mmss,
        datatype: 'xml',
        mtype: 'GET',
        height: 'auto',
        colNames:[ 'RRID', 'Release Tag','Completed Date','Result', 'Firm  Ware','DUT','Summary','Remarks'],
        colModel:[
            {name:'idreleaseRequest', index:'idreleaseRequest', width:24},
            {name:'releaseRequestTag', index:'releaseRequestTag'},   
            {name:'DateInfo', index:'Date Info', sortable:false,align:'center'},
            {name:'Result', index:'Result', sortable:false},
            {name:'Firm Ware', index:'Firm Ware', sortable:false},
            {name:'DUT', index:'DUT', sortable:false},              
            {name:'Summary', index:'Summary', sortable:false, align:'left'} ,
            {name:'Remarks', index:'Total Suites', sortable:false}],       
        pager: $('#pager1'),
        rowNum:6,
        rowList:[6,12,18,24],
        sortable:true,
        sortname: 'timeStamp',
        sortorder: "DESC",
        // caption:"Test Results : "+ globalData,
        caption:"Test Results ",
        shrinkToFit:true,
        autowidth: true,
        viewrecords: true,
        rownumbers:true,
        cloneToTop:true, 
        hidedlg: true        
    });
    $("table.ui-jqgrid-htable thead").appendTo("table#list1");
    function  ShowHideColumn () {
        $.extend(true, $.ui.multiselect, {
            locale: {
                addAll: 'Make all visible',
                removeAll: 'Hide All',
                itemsCount: 'Avlialble Columns'
            }
        });
        $.extend(true, $.jgrid.col, {
            width: 450,
            modal: true,
            msel_opts: {dividerLocation: 0.5},
            dialog_opts: {
                minWidth: 470,
                show: 'blind',
                hide: 'explode'
            }
        });
        $("#list1").jqGrid("setColProp", "rn", {hidedlg: false});
        $('#list1').jqGrid('columnChooser');

当我通过列选择器重新排序列时,标题名称未重新排序但值已重新排序,如何解决此问题,请有人帮我解决这个问题,谢谢

我正在使用这个 js 文件

  <script type="text/javascript" src="../js/jquery.js"></script>
    <script type="text/javascript" src="../js/jquery-ui.js"></script>
    <script type="text/javascript" src="../js/popup/popup.js"></script>
    <script type="text/javascript" src="js/viewTestReq.js"></script>   
     <script type="text/javascript" src="../js/jquery.validate/jquery-validate.js"></script>
    <script type="text/javascript" src="../js/jquery.form/jquery.form.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    <script type="text/javascript" language="javascript" src="http://code.jquery.com/jquery-ui- 1.8.2.custom.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
    <script type="text/javascript" src="../js/ui.multiselect.js"></script>         
    <script type="text/javascript" src="../js/jqGrid/js/i18n/grid.locale-en.js"></script>        
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-4.3.1/js/jquery.jqGrid.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>

对于列选择器,我使用这样的单独功能:

    function  ShowHideColumn () {
            $.extend(true, $.ui.multiselect, {
            locale: {
                addAll: 'Make all visible',
                removeAll: 'Hide All',
                itemsCount: 'Avlialble Columns'
            }
        });
        $.extend(true, $.jgrid.col, {
            width: 450,
            modal: true,
            msel_opts: {dividerLocation: 0.5},
            dialog_opts: {
                minWidth: 470,
                show: 'blind',
                hide: 'explode'
            }
        });
      $("#list1").jqGrid("setColProp", "rn", {hidedlg: false});
     $('#list1').jqGrid('columnChooser');


 }

【问题讨论】:

  • $("table.ui-jqgrid-htable thead").appendTo("table#list1") 行似乎是错误的。你为何这样做? jqGrid的内部结构。你的目标是什么?顺便说一句,我建议您将postData 与函数一起使用,而不是像目前那样构建url(有关详细信息,请参阅the answer)。
  • 嗨奥列格,我的意思是你所说的,如果我没有添加那条线 jqgrid 列对齐看起来不好,那就是我附加那条线的情况,我有大数据要显示一列,是否有任何解决方案可以在不删除此行的情况下对列进行重新排序,或者告诉我任何其他解决方案,哪种对齐方式对于大数据和列重排应该是完美的。请帮助我,感谢您的回复。
  • 嗨 Oleg,我使用了 PostData 但没有用,直到一周我才能解决这个问题,我被困在这个问题上,请帮助我,谢谢
  • 您应该更详细地描述您的原始问题。您在“列对齐”下的意思是什么?列标题或网格单元格的对齐方式?垂直对齐还是水平对齐?等请参阅the answer 了解列标题的对齐方式。
  • 我写postData 是因为对url 的请求将是由于jqGrid 的一些内部 操作。如果 URL 的值 testsuite, testcase, ch, fromdate, todate, mmss 来自页面上的某些控件,那么您将看到在 jqGrid 的分页或排序时可以发送 old 值。此外,您可能需要在手动构建 URL 期间使用encodeURIComponent

标签: jquery jqgrid


【解决方案1】:

您包含 多次 jQuery 和 jQuery UI,甚至包含在不同版本中。这是错的!见

<script type="text/javascript" src="../js/jquery.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>

<script type="text/javascript" src="../js/jquery-ui.js"></script>
<script type="text/javascript" language="javascript" 
        src="http://code.jquery.com/jquery-ui-1.8.2.custom.min.js"></script>
<script type="text/javascript"
        src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
<script type="text/javascript"
        src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>

应该包含每个 JavaScript 库只有一个!!!

此外,我不建议您使用旧的 4.3.1 版本的 jqGrid 并从我的网站 (http://www.ok-soft-gmbh.com/jqGrid) 包含 jqGrid 的副本。有一些带有 jqGrid 的公共 CDN(内容交付网络)。例如cdnjs(见here)或jsdelivr(见here):

<link rel="stylesheet" type="text/css"
      href="http://cdnjs.cloudflare.com/ajax/libs/jqgrid/4.6.0/css/ui.jqgrid.css"/>
<script type="text/javascript" 
        src="http://cdnjs.cloudflare.com/ajax/libs/jqgrid/4.6.0/js/i18n/grid.locale-en.js"></script>
<script type="text/javascript"
        src="http://cdnjs.cloudflare.com/ajax/libs/jqgrid/4.6.0/js/jquery.jqGrid.min.js"></script>

更新 您发布的 jsfiddle 演示包含许多不需要的 CSS 规则,这是列对齐错误问题的根源。固定demohttp://jsfiddle.net/OlegKi/y2yfuvjy/2/没有问题。

更新 2:不能只为 jqGrid 的所有内部表设置 table-layout:auto。它将破坏 jqGrid 的内部结构。如果您需要根据列或列标题中单元格内容的宽度来设置列的宽度,那么您可以关注我为the answer 创建的the demo。见http://jsfiddle.net/OlegKi/y2yfuvjy/7/

【讨论】:

  • 嗨,oleg,谢谢你的帮助,我真的很生气,我知道,但是在使用列选择器后我又遇到了一个问题,它没有设置列宽,它显示的是基本列宽跨度>
  • @Sravya:当然,您无法更改列的宽度,因为您将根据列中单元格的内容设置宽度。如果您需要更改列的宽度,则必须更改列中的内容。您仍然可以使用列选择器来隐藏/显示列或更改列的顺序。
  • 其实我是单独使用列选择器的,我贴了上面的代码,之后如何设置在columnchooser选项之前显示的列宽
  • @Sravya:如果我正确理解您的问题,您只需从绑定到“jqGridAfterLoadComplete”更改为绑定到 2 个事件“jqGridAfterLoadComplete jqGridRemapColumns”:请参阅jsfiddle.net/OlegKi/y2yfuvjy/7
  • @Sravya 不断返回并更改初始要求或在 cmets 中提出新问题是不公平的。如果您还有更多问题,请提出新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多