【问题标题】:How does one align a single row to the top in JQGrid?如何在 JQGrid 中将单行对齐到顶部?
【发布时间】:2011-01-21 21:13:18
【问题描述】:

JQGrid 非常适合用 jQuery 显示数据,但它并没有很好的文档。

当网格只有一个要显示的元素时,我遇到了网格问题。出于某种原因,它将单行对齐到底部而不是顶部。

这是一张未对齐的单行的图片:

这是我传入的 jqgrid 选项

jQGridOptions = {
            "recordtext": '{0} - {1} of {2}',
            "url": 'data.json',
            'datatype': 'json',
            'mtype': 'GET',
            'colModel': [
                { 'name': 'Rank', 'align': 'center', 'index': 'Rank', 'sortable': false, 'search': false },
                { 'name': 'Name', 'index': 'Name', 'sortable': false, 'search': true },
                { 'name': 'Score', 'index': 'Score', 'sortable': false, 'search': false }
            ],
            'pager': '#ranking-pager',
            'rowNum': 10,
            'altRows': true,
            'scrollOffset': 0,
            'colNames': ["Rank", "Name", "Score"],
            'width': 696,
            'height': 'auto', // '100%',  // 300,
            'page': 1,
            'sortname': 'Rank',
            'sortorder': "asc",
            'hoverrows': true,
            'viewrecords': true,
            'gridComplete': function () {
                $('.ui-jqgrid-bdiv').jScrollPane({ showArrows: true, scrollbarWidth: 17, arrowSize: 17, scrollbarMargin: 0 });

                if (selectedRank !== -1) {
                    selectRank(selectedRank);
                    selectedRank = -1;
                }
            },
            'jsonReader': {
               id : 'Rank',
               'repeatitems': false
        }
    };

根据要求,以下是 data.json 的结果:

{
    "page":1,
    "total":1,
    "records":1,
    "rows":  [{
                  "Name":"Gil Agostini",
                  "Score":94,
                  "Rank":1
             }]
}

调用 jQGrid

$(document).ready(function () {
        $("#ranking-table").jqGrid(jQGridOptions);
});

HTML:

 <div style="float: left;">
                <div class="hvy-border1">
                    <div class="hvy-border2">
                        <div class="hvy-top-left hvy-corner">
                            <div>
                                <!-- -->
                            </div>
                        </div>
                        <div class="hvy-top-right hvy-corner">
                            <div>
                                <!-- -->
                            </div>
                        </div>
                        <div class="clear">
                            <!-- -->
                        </div>
                        <div id="table-and-pager" style="margin: 3px;">
                            <table id="ranking-table" class="scroll" cellpadding="0" cellspacing="0" style="height: 300px">
                            </table>
                            <div id="ranking-pager" class="scroll" style="text-align: center;">
                            </div>
                        </div>
                        <div class="clear">
                            <!-- -->
                        </div>
                        <div class="hvy-bottom-left hvy-corner">
                            <div>
                                <!-- -->
                            </div>
                        </div>
                        <div class="hvy-bottom-right hvy-corner">
                            <div>
                                <!-- -->
                            </div>
                        </div>
                    </div>
                </div>
            </div>

谁能告诉我我在这里做错了什么?

如何让行对齐顶部而不是底部?

【问题讨论】:

  • 您能否插入包含该行的 JSON 响应 data.json?不使用jScrollPane插件,不调用selectRank函数,结果一样吗?
  • 注释掉 selectRank 或该函数的 jScrollPane 部分似乎根本没有任何明显的效果。
  • 仍然需要答案,我在 jqGrid 论坛上再次提出了这个问题:trirand.com/blog/?page_id=393/help/…
  • 代码中的小错误:您需要包含决定 gridCompletejsonReader 参数的逗号。
  • @Oleg,感谢您花时间指出这一点。我会纠正的。

标签: javascript jquery jqgrid paging


【解决方案1】:

我无法重现您描述的问题。我想你为 jqGrid 使用了一些额外的设置:你没有发布你的示例的整个 JavaScript 代码。

不过,我可以肯定地说,您在从服务器返回的 JSON 数据的格式方面存在一些问题。重要的是每一行数据都必须有一个唯一的 id。例如

{ "id":123, "Name":"Gil Agostini", "Score":94, "Rank":1 }

而不是

{ "Name":"Gil Agostini", "Score":94, "Rank":1 }

id 也可以是字符串类型,而不仅仅是数字。此外,您必须定义 jqGrid 的 jsonReader 参数,因为您的数据具有命名元素而不是标准的字符串数组(更紧凑和小数据)。在这种情况下,您至少应该使用jsonReader: {repeatitems: false}

如果某些其他网格列(如 Name 列)可以解释为 id,您可以在相应的列定义中包含 key:true 或使用 id:'Name' 作为 jsonReader 的属性。

例如下面的jsonReader

jsonReader: {
    repeatitems: false,
    id: 'Name'
}

可用于读取您当前的 JSON 数据(见直播here)。使用您喜欢的任何工具,您可以验证网格的&lt;tr&gt; 元素的id 值。

【讨论】:

  • 很抱歉,当我将代码剪切并粘贴到问题中时,我错过了 JsonReader。我将其添加回问题中。是否还有您想要的 javascript 或 css 代码?
  • 您在此处建议的所有更改都没有任何效果。无论我有没有,jQGrid 的行为都没有什么不同,id: 'Rank'。
  • @Mark Rogers:您应该从 &lt;table id="ranking-table" 元素中删除 style="height: 300px"。如果您需要定义网格高度,您应该将height:'auto' 选项更改为height:300class="scroll" 等其他设置也已过时。我建议您只使用&lt;table id="ranking-table"&gt;&lt;/table&gt;&lt;div id="ranking-pager"&gt;&lt;/div&gt; 或在&lt;table&gt; 元素内包含额外的&lt;tr&gt;&lt;td/&gt;&lt;/tr&gt; 以符合XHTML 标准。示例ok-soft-gmbh.com/jqGrid/MarkRogers1.htm 更接近您的代码。 id 的使用在其他情况下很重要。
  • @Mark Rogers:如果您的数据不包含 id,您仍然可以显示数据,但 &lt;tr&gt; 元素的 id 将从 1 开始。如果您在一个上有两个网格页面填写的方式会有id冲突。由于同样的原因,您当然不能使用任何其他具有整数 id 的 HTML 元素。如果您需要使用本地数据编辑,如果您没有唯一的行 ID,您将遇到真正的问题。因此,在最简单的情况下,您可以使用没有 id 的数据显示 jqGrid,但我强烈建议您不要这样做。
  • @Mark Rogers:那么如果您删除style="height: 300px" 并将height:'auto' 选项替换为height:300(如果需要),那么您的问题将得到解决。如果问题仍然存在,您应该发布您使用的所有类的 CSS 定义。
猜你喜欢
  • 2020-12-11
  • 2015-04-02
  • 2015-12-29
  • 1970-01-01
  • 2016-08-26
  • 2010-12-17
  • 2014-07-20
  • 2013-12-21
  • 2015-07-31
相关资源
最近更新 更多