2014-10-29 1 views
2

По некоторым причинам я генерирую HTML-код для клиентов определенного периода времени и в этом коде. Мне нужны столбцы в долларах (столбцы «оплачены» и «заряды»), выравниваемые по правому краю, как это возможно, используя XML raw ('tr').Правильное выравнивание TD HTML-тега

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 [email protected]+'<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 
+0

Мне, должно быть, что-то не хватает здесь: Вы описываете программу sql, которая генерирует html? кажется, что не имеет никакого отношения к вопросу ... более актуальным, вероятно, будет сгенерированный html и css, где мы можем помочь вам с вашим вопросом. Также генерация html непосредственно внутри процедуры sql-сервера не ударяет меня как хорошая практика. – alonisser

+1

Добавьте '' text-align: right 'как' td/@ style ', 'right before' td = charges,' ', '. Если это добавлено сразу после SELECT, он выровняет все столбцы. Попробуй это. – CaptainBli

+0

@@ alonisser HTML-генерация - это плохая практика, использующая SQL-программу в подпрограммах, но иногда только один раз нам нужно создавать отчеты о конкретных клиентах. –

ответ

4

Я хотел бы предложить вам попробовать изменить две строки:

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

Затем вы можете добавить 'text-align:right' as 'td/@style', непосредственно перед td= charges,'',. Если это добавлено сразу после 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>' 
+0

@@ CaptainBli это не работает. Мне нужно, чтобы текст в столбце выравнивался вправо. –

+0

Замечание об изменениях в исправлении твоя проблема. – CaptainBli

+0

да, вы правы [td/@ align] = 'right' требуется прямо перед платежами и оплаченными столбцами TDs, я обновил ваш ответ –

-1

Ваше требование действительно странно, если не сказать больше. Но поскольку этот вопрос касается стиля HTML, оставьте SQL в покое. Добавьте стиль CSS в свой HTML-файл:

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

Это выравнивание по правому краю 5-го и 6-го столбцов, которые относятся к оплате и оплате.