合并jqgrid中的两个字段

时间:2012-04-11 10:05:41

标签: jquery jqgrid struts2

我有一个包含用户属性的jqgrid。这些属性是firstname,middlename,lastname,age,gender等。我想显示全名,而不是分别显示firstname,middlename和lastname。因此,此填充名称列将连接firstname,middlename和lastname。请问我该怎么做。 感谢

更新: 我正在使用struts 2 web framework

        <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>

3 个答案:

答案 0 :(得分:3)

隐藏:对于您不想要的列,即firstname,lastname

,为true

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

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

答案 1 :(得分:1)

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

我建议您将新的组合列fullName添加到网格定义中,并使用beforeProcessing内的客户端数据填充列。顺便说一句,jqGrid只会在输入中看到fullName的数据。所以一切都应该没有大的努力。如果您不需要单独显示firstNamelastName,则可以从网格定义中删除列。

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

答案 2 :(得分:0)

最简单的解决方案是修改数据源(EG: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);
    ...
}