首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果html表格中的任何单元格为空,如何突出显示整行

如果html表格中的任何单元格为空,如何突出显示整行
EN

Stack Overflow用户
提问于 2012-09-07 13:34:04
回答 3查看 301关注 0票数 0

我已经用下面的代码在邮件正文中创建了html表格

代码语言:javascript
复制
            st = con.createStatement();
            rs = st.executeQuery("SELECT nvl(tt.ACTIVITY_NAME,'') as ACTIVITY_NAME, "
                    + " nvl(tt.TL_NAME,'') TL_NAME, "
                    + " nvl(tt.UW_NAME,'') UW_NAME, "
                    + " nvl(tt.TAT_1,'') TAT_1,"
                    + " nvl(tt.TAT_2,'') TAT_2, "
                    + " nvl(tt.TAT_3,'') TAT_3, "
                    + " nvl(tt.TAT_4,'') TAT_4, "
                    + " nvl(tt.TAT_4_PLUS ,'') TAT_4_PLUS, "
                    + " nvl(tt.g_total ,'') AS GRAND_TOTAL "
                    + " FROM uw_activity_tl_uw_tat tt "
                    + " WHERE tt.ACTIVITY_NAME = 'First UW' "
                    + " ORDER BY tt.TL_NAME,tt.UW_NAME");
            StringBuffer sb = new StringBuffer();

            ResultSetMetaData rsmd = rs.getMetaData();
            int numColumns = rsmd.getColumnCount();
            for (int i = 1; i < numColumns + 1; i++) {
                String columnName = rsmd.getColumnName(i);
                sb.append("<th bgcolor=#fcbe07>" + columnName + "</th>");
            }
            ArrayList<String> a = new ArrayList<String>();

            while (rs.next()) {

                a.add(rs.getString(3));

                if (rs.getRow() % 2 == 0) {
                    sb.append("<tr bgcolor=#fcf6cf>");
                    for (int i = 1; i < numColumns + 1; i++) {
                        if (rs.getString(i) == null) {
                            if(i==3)
                            {
                                sb.append("<td bgcolor=#fcbe07><b>"+ " "+ "</b></td>");

                            }


                        } else {

                            if (i == 6 || i == 7 || i == 8)
                                sb.append("<td><FONT COLOR=#ff0000>"
                                        + rs.getString(i) + "</FONT></td>");
                            else if(i==3 && (rs.getString(3).equalsIgnoreCase("") || rs.getString(3)==null)){
                                sb.append("<td bgcolor=#fcbe07><b>"+ rs.getString(i) + "</b></td>");
                            }else{
                                sb.append("<td>" + rs.getString(i) + "</td>");
                            }
                        }
                    }

                    sb.append("</tr>");
                } else {

                    sb.append("<tr>");
                    for (int i = 1; i < numColumns + 1; i++) {
                        if (rs.getString(i) == null) {
                            if(i==3)
                            {
                                sb.append("<td bgcolor=#fcbe07><b>"+ " " + "</b></td>");

                            }

                        } else {
                            if (i == 6 || i == 7 || i == 8)
                                sb.append("<td><FONT COLOR=#ff0000>"
                                        + rs.getString(i) + "</FONT></td>");
                            else if(i==3 && (rs.getString(3).equalsIgnoreCase("") || rs.getString(3)==null)){
                                sb.append("<td bgcolor=#fcbe07><b>"+ rs.getString(i) + "</b></td>");
                            }else{
                                sb.append("<td>" + rs.getString(i) + "</td>");
                            }
                        }
                    }

                    sb.append("</tr>");

                }

            }

            String html = "<html>" + message.getSubject()
                    + "</title></head><body><table border=\"1\">"
                    + sb.toString() + "</table></body></html>";
            message.setContent(html, "text/html");

在图像中,只有一个单元格被高亮显示,我想高亮显示包含任何空cell.Please向导的整行。我的问题是,如果任何单元格为空,如何突出显示整行。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-07 13:43:47

简而言之:移动第三列的复选标记并更改<tr>行。

说实话,你的代码有点乱七八糟。就我个人而言,我将进行以下更改,以使维护变得更容易:

  1. 切换到使用类,而不是硬编码bgcolor等等。
  2. 将您的系统设置为返回关联数组,而不是数字数组。
  3. 设置了中间变量来保存返回的值,这将使读取代码变得容易得多。在那里进行任何和所有的计算和设置。然后一次性转储整个表行。它将你的“函数式”代码与你的“显示代码”分开。

然而,在紧要关头,像这样的东西会让你继续前进:

代码语言:javascript
复制
tmp = rs.getString(3);
if (tmp == null) {
  sb.append("<tr bgcolor=#ffffff>");
} else {
  sb.append("<tr bgcolor=#fcf6cf>");
}

顺便说一句,您生成的HTML无效。

票数 2
EN

Stack Overflow用户

发布于 2012-09-07 13:48:33

我的头顶

代码语言:javascript
复制
boolean cellNull = false;
while(rs.next()){
    cellNull = false;
    cellNull = checkIfAnyFieldIsNull(rs);
    if(cellNull)
        sb.append("<tr bgcolor=\"#WTH\">");
    else
        sb.append("<tr>");

    //create rest of the row content here
}


private boolean checkIfAnyFieldIsNull(ResultSet rs){
    for(i=0 etc..){
        if(rs.getString(i) == null)
            return true;
    }
    return false;
}
票数 1
EN

Stack Overflow用户

发布于 2012-09-07 13:48:30

这样做的一种方法如下:

  • 创建一个POJO类,其中包含要显示的所有列。还有一个布尔型变量,比如empty。将其设置为true,如果您的任何列为空,则
  • 创建一个ArrayList,并在迭代结果集时添加类的每个实例
  • 现在使用此ArrayList呈现您的输出。由于已经有了布尔变量,因此可以使用此值来设置行的背景颜色。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12312259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档