TD HTML标签的右对齐

4

出于某些原因,我正在为特定时间段的客户生成HTML代码,在该代码中,我需要美元字段(“已支付”和“费用”列)的文本右对齐,如何使用XML raw('tr')实现此目标。

create table #Customer
(
id varchar(500),
CustomerName varchar(500),
customertype varchar(500),
LastOrderNo varchar(500),
charges varchar(500),
Payed varchar(500)
)

insert into #Customer
select '201','Cus1','XX','on-09799','60.09$','30.00$'
union all 
select '202','Cus2','XX','on-09777','90.09$','50.00$' 
union all 
select '203','Cus3','YY','on-09766','100.09$','100.00$' 
union all 
select '204','Cus4','ZZ','on-09788','2000.09$','2000.00$' 


Declare @Body varchar(max)
set @Body=''

select @Body =@Body+'<table cellpadding=0 cellspacing=0 border=0 >' +
                  '<tr><td width="100px" > ID</td>' +
                      '<td width="140px" >CustomerName</td>' +
                      '<td width="100px" >Customertype</td>' +
                      '<td width="100px" > LastOrderNo</td>' +
                      '<td width="100px" align="right" bgcolor=#E6E6FA><b> charges</b></td>' +
                      '<td width="110px" align="right" bgcolor=#E6E6FA><b> Payed</b></td></tr>'

select @Body = @Body+(SELECT  
                        td= id,'',
                        td= CustomerName,'',
                        td= customertype,'',
                        td= LastOrderNo,'',
                        td= charges,'',     
                        td= Payed,''    
                        from #Customer                          
                        For XML raw('tr'), Elements
                )+'</table>'


select @Body

select * from #Customer


drop table #Customer

我可能漏掉了什么:您正在描述一个生成HTML的SQL程序?似乎与问题无关...更相关的可能是生成的HTML和CSS,我们可能能够帮助您解决问题。此外,在SQL服务器过程中直接生成HTML并不是一个好的实践。 - alonisser
1
td= charges,'' 之前添加 'td/@style'='text-align:right'。如果在 SELECT 语句之后添加,它将对所有列进行对齐。试试看。 - CaptainBli
@@alonisser 使用SQL程序例程生成HTML是不良的实践,但有时我们只需要为特定客户生成报告。 - AA.SC
2个回答

6
我建议您尝试将这两行修改为:
             '<td width="100px" style="text-align:right" bgcolor=#E6E6FA><b> charges</b></td>' +
             '<td width="110px" style="text-align:right" bgcolor=#E6E6FA><b> Payed</b></td></tr>'

您可以进一步通过以下方式在样式中移动背景颜色:

 style="text-align:right;background-color:#E6E6FA"

然后,您可以在 td= charges,'', 之前将 'text-align:right' 作为 'td/@style' 添加。如果在 SELECT 之后立即添加,则会对所有列进行对齐。您可以尝试一下。

 select @Body = @Body+(SELECT   
      td= id,'',
      td= CustomerName,'',
      td= customertype,'',
      td= LastOrderNo,'',
      [td/@align]='right',
      td= charges,'',  
      [td/@align]='right',   
      td= Payed,''    
    from #Customer                          
    For XML path('tr') ---- instead of for xml raw(tr), element
 )+'</table>'

@@CaptainBli这个不行,我需要两列的文本右对齐。 - AA.SC
请注意更改以解决您的问题。 - CaptainBli
是的,你说得对,在费用和支付列的TD之前需要[td/@align]='right',我已经更新了你的答案。 - AA.SC

-1

你的需求可以说是相当奇怪。但既然这个问题与HTML样式有关,就不要管SQL了。在你的HTML文件中添加CSS样式:

<style type="text/css">
        tr td:nth-child(5), tr td:nth-child(6) {
            text-align:right;
        }
</style>

这将右对齐第5列和第6列,它们是Charges和Payed。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接