【问题标题】:Merge Two fields in jqgrid合并jqgrid中的两个字段
【发布时间】:2012-04-11 10:05:41
【问题描述】:

我有一个包含用户属性的 jqgrid。这些属性是名字、中间名、姓氏、年龄、性别等。我想显示全名而不是分别显示名字、中间名和姓氏。所以这个填充名称列将连接名字、中间名和姓氏。请问我该怎么做。 谢谢

更新: 我正在使用 struts 2 网络框架

        <s:url id="studentTableURL" namespace="/student" action="loadStudentsTable"/>
        <tr>
            <td>
                <sjg:grid id="studentGrid" caption="%{getText('studentsearch.title')}" dataType="json" href="%{studentTableURL}" pager="true"
                          gridModel="studentList"
                          rowList="10,15,20"
                          rowNum="15"
                          rownumbers="true"
                          onSelectRowTopics="rowselect"
                          >
                    <sjg:gridColumn name="id" align='left' index="id" title='Id' hidden="true"/>
                    <sjg:gridColumn name="studentNumber" width="100" align='left' index="studentNumber" title='%{getText("studentaction.studentnumber")}' sortable="true"/>
                    <sjg:gridColumn name="firstName" align='left' index="firstName" title='%{getText("studentaction.firstname")}' sortable="true"/>
                    <sjg:gridColumn name="lastName" align='left' index="lastName" title='%{getText("studentaction.lastname")}' sortable="true"/>
                    <sjg:gridColumn name="gender" align='left' width="80" index="gender" title='%{getText("studentaction.gender")}' sortable="true"/>
                    <sjg:gridColumn name="phoneNumber" align='left' width="100" index="phoneNumber" title='%{getText("studentaction.phonenumber")}' sortable="true"/>
                </sjg:grid>
            </td>
        </tr>

【问题讨论】:

  • 你能发布生成网格的代码吗?至少它所提供的数据会有所帮助。
  • 感谢 t0s6i 解决方案。

标签: jquery jqgrid struts2


【解决方案1】:

对于您不想要的列,例如名字、姓氏,隐藏:true

为带有 name="id" 的额外列实现格式化程序,如下所示

function myFormatter(cellvalue, options, rowObject){
    return rowObject.firstName + " " + rowObject.lastName;
    ...
}

【讨论】:

    【解决方案2】:

    您的问题与我刚刚回答的another one 非常接近。我有点难以理解网格定义,因为您没有发布将在客户端运行的 JavaScript 代码。

    我建议您将新的组合列fullName 添加到网格定义中,并用beforeProcessing 内部的客户端数据填充该列。 jqGrid 只会在输入中看到fullName 的数据。因此,一切都应该不用付出很大的努力就可以工作。如果您不需要分别显示firstNamelastName,您可以从网格定义中删除列。

    自定义格式化程序的工作方式也取决于您使用的其他设置。要编写自定义格式化程序,了解服务器响应中数据的确切格式很重要。例如,重要的是要知道您是否在jsonReader 中使用repeatitems: false 属性。编写beforeProcessing 的正确实现需要知道的相同信息。 beforeProcessing 方法的最大优点是您将看到您是否会使用 loadonce: true 选项并使用数据的本地排序或过滤。

    【讨论】:

      【解决方案3】:

      最简单的解决方案是修改数据源(例如:XML/JSON Web 服务)以在此处添加新列。

      或者,您可以使用带有自定义格式化程序的新 full_name 列来实现此目的,但是从格式化程序中访问行中的其他列有点棘手,因此需要一个辅助函数:

      function getRowObjectFromFormatter (key, rowObject){
          var searchHTML = function(){
              return jQuery(rowObject).find('td[aria-describedby*="' + key + '"]').text();
          }, tmp;
      
          if (rowObject.constructor != undefined){
              if (rowObject.constructor == Object){
                  return rowObject[key];
              } else if (rowObject.constructor == HTMLTableRowElement){
                  return searchHTML();
              }
          } else if (jQuery.browser.msie && jQuery.browser.version == "7.0"){
              // Hack to correctly extract data from an HTML table in IE7
              tmp = searchHTML();
              if (tmp != null && tmp.length > 1){
                  return tmp;
              }
          }
      
          return jQuery(rowObject).find(key).text();
      }
      
      function myFormatter(cellvalue, options, rowObject){
          var otherColumn = getRowObjectFromFormatter('otherColumn', rowObject);
          ...
      }
      

      【讨论】:

      • 请问我该如何实现。我知道自定义格式化程序。由于 cellvalue 仅处理其中一个字段,我如何获取其他字段。谢谢
      • 非常感谢。让我测试一下,看看它是如何出现的。感谢您的努力
      • 没问题。如果它满足您的需求,请考虑接受此答案。
      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2014-02-27
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多