2016-08-05 46 views
0

Ich baue eine HTML-Tabelle aus einer C# typisierten Liste. Bis jetzt funktioniert das Erstellen der Tabelle gut, aber ich muss jetzt einen Stil an einen der <TD> Tags innerhalb der Zeichenfolge anfügen, die die Tabelle aufbaut.Wie hängt man die Stildefinition an <TD> Tag in String mit StringBuilder an?

Was ich versucht habe, ist einfach die Stildefinition zu TD hinzufügen, wenn an die Zeichenfolge mit String Builder angehängt. Aber ich bekomme Syntaxfehler um die Stildefinition herum.

Frage: Wie können Sie eine Stildefinition an das Tag in einer Zeichenfolge anhängen?

Ich schaffe den Tabellenkörper mit String Builder String-Instanz:

StringBuilder releaseStatusTableBodyData = new StringBuilder(); 

Dann eine Zeile und Spalte der Tabelle Zeichenfolge hinzuzufügen. Das Entfernen der doppelten Anführungszeichen aus dem Stil entfernen nicht die Syntaxfehler gezeigt entweder:

 foreach(var row in releaseStatusList) 
     { 

      //for each record create a new table row 
      releaseStatusTableBodyData.Append("<TR>\n"); 


      releaseStatusTableBodyData.Append("<TD style=""bgcolor: green;"">"); //added the style to the TD here, but get syntax error on the style telling me) is required. 
      releaseStatusTableBodyData.Append(row.Days_Owned); 
      releaseStatusTableBodyData.Append("</TD>"); 



      releaseStatusTableBodyData.Append("</TR>\n"); //end of row 

     } 

Antwort

1

Setzen Sie ein Wort für Wort wörtliche (@) zu Beginn der Zeichenfolge.

Von einigen Hintergrundhintergründen Hinzufügen von Escape-Strings innerhalb der Zeichenfolge scheint einfacher, aber für mich ist dies viel einfacher zu lesen.

Es könnte sich auch lohnen, stattdessen einen HtmlTextWriter auszuprobieren. Es macht im Wesentlichen dasselbe mit ein wenig HTML-spezifischer Hilfe.

string html; 
using (var sw = new StringWriter()) 
using (var hw = new HtmlTextWriter(sw)) 
{ 
    hw.RenderBeginTag(HtmlTextWriterTag.Tr); 
    hw.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, "green"); 
    hw.RenderBeginTag(HtmlTextWriterTag.Td); 
    hw.RenderEndTag(); 
    hw.RenderEndTag(); 
    html = sw.ToString(); 
} 

Was ein wenig seltsam ist, dass Sie das Stil-Attribut vor Rendern den Td Tag hinzuzufügen haben.

Was ist gut ist, dass Sie mit vielen vordefinierten Konstanten für Tag-Namen und Stilnamen arbeiten. Und das ist viel einfacher, wenn Sie eine bedingte Logik benötigen.

hw.RenderBeginTag(HtmlTextWriterTag.Tr); 
if(makeThisGreen) 
    hw.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, "green"); 
if(makeThisBold) 
    hw.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "bold"); 
hw.RenderBeginTag(HtmlTextWriterTag.Td); 
hw.RenderEndTag(); 
hw.RenderEndTag(); 

Mit einem StringBuilder, wenn Sie in den zweiten Zustand erhalten Sie überprüfen müssen, ob Sie das style Attribut bereits damit begonnen, um sicherzustellen, dass Sie es nicht zweimal erstellt haben. Dann müssten Sie prüfen, ob eine dieser Bedingungen zutrifft, damit Sie wissen, ob Sie das Endzitat zum Attribut style hinzufügen müssen. (Oder Sie könnten eine Methode erstellen, um all das für Sie zu tun.) Aber diese Arbeit ist bereits in der Klasse HtmlTextWriter erledigt. Sie können auch WriteBeginTag(string) und WriteEndTag(string) verwenden, die Ihnen mehr explizite Kontrolle über das Schreiben Ihrer Tags geben.