是否有更好的方法将多值数据显示为列

Is there a better way to display multivalue data as a column?

本文关键字:数据 显示 更好 方法 是否      更新时间:2023-09-26

我的笔记数据库中有4个审计字段。它们是多值的,当表单上的内容发生变化时,它们每个都得到一个新条目。我有一个审计表单,它以列的方式显示这些字段。就像风景一样。下面是这些列的代码。

<xp:tr>
  <xp:td style="background-color:rgb(255,255,255)">
  <xp:text escape="true" id="dspAuditWhen"></xp:text></xp:td>
  <xp:td style="background-color:rgb(255,255,255)">
  <xp:text escape="true" id="dspAuditWho"></xp:text></xp:td>
  <xp:td style="background-color:rgb(255,255,255)">
  <xp:text escape="true" id="dspAuditWhat"></xp:text></xp:td>
  <xp:td style="background-color:rgb(255,255,255)">
  <xp:text escape="true" id="dspAuditValue"></xp:text></xp:td>
</xp:tr>

我用客户端"onClientLoad"事件填充这些字段。

var auditWhen = XSP.getElementById("#{id:AuditWhen}").value.split(";");
XSP.getElementById("#{id:dspAuditWhen}").innerHTML = auditWhen.join("'n");
var auditWho = XSP.getElementById("#{id:AuditWho}").value.split(";");
for ( i = 0; i < auditWho.length ; i++) {auditWho[i] = auditWho[i].substr(0,20); }
var a=auditWho.join("'n");
XSP.getElementById("#{id:dspAuditWho}").innerHTML = auditWho.join("'n");
var auditWhat = XSP.getElementById("#{id:AuditWhat}").value.split(";");
var b=auditWhat.join("'n");
XSP.getElementById("#{id:dspAuditWhat}").innerHTML = auditWhat.join("'n");

注意几件事。我还没有dspAuditValue的代码。我还控制了auditWho的长度。还要注意,我有一个变量"a",和"b"用于调试。

无论如何,这段代码对于dspAuditWhen和dspAuditWho列工作得非常好。对于dspAuditWhat,它们似乎只是由空格分隔,而不是换行符。

我比较了"auditWhat"answers"auditWho"。"auditWhat"成功拆分为一个数组,就像"auditWho"一样

我比较了"b"answers"a"。它也是一个大字符串,每个元素之间用'n分隔。

我已经验证了auditWhat是notes客户机中的多值列表字段。(如果不是,那么我的Notes客户机审计表单将无法工作。)

我完全看不出这段代码有什么问题。这就好像网页浏览器在说"你得到了2列你想要的数据,就是这样!!"

在两个IE &Firefox

'n不是HTML标记-它就像HTML源代码中的回车符。

尝试加入
例如:

XSP.getElementById("#{id:dspAuditWhat}").innerHTML = auditWhat.join("<br/>");

所有值都在表的同一行中。每个值可以生成一行。这可以在服务器端这样做:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:this.data>
        <xp:dominoDocument var="document1" formName="TestHistory"
            action="openDocument" />
    </xp:this.data>
    <xp:this.resources>
        <xp:styleSheet href="/histo.css" />
    </xp:this.resources>
    <xp:repeat id="repeat1" rows="30"
        var="rowData" indexVar="rowIndex"
        value="#{document1.HistoDate}">
        <xp:this.facets>
            <xp:text disableTheme="true" xp:key="header"
                escape="false">
                <xp:this.value><![CDATA[
            <table class="histo">
                <tr>
                    <th>When</th>
                    <th>Who</th>
                    <th>What</th>
                    <th>Comment</th>
                </tr>
            ]]></xp:this.value>
            </xp:text>
            <xp:text disableTheme="true" xp:key="footer"
                escape="false">
                <xp:this.value><![CDATA[</table>]]></xp:this.value>
            </xp:text>
        </xp:this.facets>
        <xp:panel tagName="tr" styleClass="#{javascript: (rowIndex%2 ? 'odd' : 'even')}">
            <xp:text escape="true" tagName="td"
                value="#{javascript:document1.getItemValueArray('HistoDate')[rowIndex]}" />
            <xp:text escape="true" tagName="td"
                value="#{javascript:document1.getItemValueArray('HistoActor')[rowIndex]}" />
            <xp:text escape="true" tagName="td"
                value="#{javascript:document1.getItemValueArray('HistoAction')[rowIndex]}" />
            <xp:text escape="true" tagName="td"
                value="#{javascript:document1.getItemValueArray('HistoComment')[rowIndex]}" />
        </xp:panel>
    </xp:repeat>
</xp:view>

还有一些像这样的css:

table.histo {
    margin: 10px;
    border: 1px solid #E0E0E0;
    border-collapse: collapse;
}
table.histo th, table.histo td {
    border: 1px solid #E0E0E0;
    padding: 2px 4px;
}
table.histo th {
    font-weight: bold;
    text-align: center;
    background-color: #D0D0D0;
}
table.histo tr.even {
    background: #FFF;
}
table.histo tr.odd {
    background: #F0F0F0;
}