Laden...

Placeholder in einem Stringbuilder?

Erstellt von Paulo vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.935 Views
P
Paulo Themenstarter:in
172 Beiträge seit 2005
vor 17 Jahren
Placeholder in einem Stringbuilder?

Hi,

ich muss meine Table im Codebehind erzeugen aus verschiedenen Gründen. In dieser Table soll pro Zeile ein (ASPNET) Input Field sein.

Ich füge dem Placeholder dynamisch neue Textboxes zu, das funktioniert solange der Placeholder im Designer deklariert ist. Jetzt müsste ich es nur schaffen den Placeholder im Codebehind zu deklarieren damit er an die richtige Stelle kommt.


sb.append("<table>");
sb.append("<tr>");
sb.append("<td>");
sb.append("<td>HIER DER PLACEHOLDER</td>");
sb.append("</tr>");
sb.append("</table>");

Das ist nur ein Beispiel den so könnte ich es auch im Designer zusammenbasteln.. geht jedoch bei mir nicht.. hab ich irgendeine Möglichkeit den Placeholder genau dort per Codebehind/Stringbuilder zu postieren?

Danke!

4.221 Beiträge seit 2005
vor 17 Jahren

AppendFormat ?
string.Format ?

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

N
61 Beiträge seit 2005
vor 17 Jahren

Warum fügst du kein Literal ein? Wenn ein Platzhalter kommt, fügst du dein generierten Code in das Literal Feld ein und danach machst du dir ein Placeholder oder was auch immer.

Ungefähr so:


Literal code1 = new Literal();
Literal code2 = new Literal();
Placeholder MyPlaceholder = new Placeholder();

code1.Text = "<table><tr><td>";
code2.Text = "</td></tr></table>";

Controls.Add(code1);
Controls.Add(MyPlaceholder);
Controls.Add(code2);

Danach kannste da einfügen was du willst. Hoffe das hilft weiter.

P
Paulo Themenstarter:in
172 Beiträge seit 2005
vor 17 Jahren

Das ist eine gute Idee naumann aber funktioniert nicht wenn die Anzahl der Zeilen variabel ist, also es z.B. so aussieht (hätte vielleicht dazu sagen sollen dass es eine schleife ist.. sorry):


sb.append("<table>");

-hier beginnt die schleife-
sb.append("<tr>");
sb.append("<td>");
sb.append("<td>HIER DER PLACEHOLDER</td>");
sb.append("</tr>");
-schleife ende-

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

Any idea? Vielen Dank!

1.130 Beiträge seit 2005
vor 17 Jahren

Hallo Paulo,

die Lösung, die Du anstrebst, zu implementieren ist nicht nur aufwendig, sondern auch schlecht zu warten.

Vielleicht schilderst Du uns mal Dein konkretes Problem. Ich bin bisher noch nicht in die Verlegenheit gekommen, Tabellen in der CodeBehind Datei zusammenzustellen.

N
61 Beiträge seit 2005
vor 17 Jahren

Dann solltest du dir überlegen, ob du nicht vielleicht eine ASP.Net Table nimmst. Mit der kannst du auf jeden fall ASP Controls in deine Spalten legen.

Vielleicht hilft dir auch das DataGrid weiter.

Ansonsten kannst du es auch so machen:



Literal tableStart = new Literal();
Literal tableEnd = new Literal();
Literal tableRowStart = new Literal();
Literal tableRowEnd = new Literal();
Placeholder MyPlaceholder = new Placeholder();

tableStart.Text = "<table>";
Controls.Add(tableStart);

tableRowStart.Text = "<tr><td>";
tableRowEnd.Text = "</td></tr>";

// 8 Zeilen werden erstellt
for(int i = 0; i <= 7; i++)
{
Controls.Add(tableRowStart);
Controls.Add(MyPlaceholder);
Controls.Add(tableRowEnd);
}

Controls.Add(tableEnd);

Somit kannst du eine Html Table in einer Schleife erstellen lassen.
Hoffe das hilft weiter.

P
Paulo Themenstarter:in
172 Beiträge seit 2005
vor 17 Jahren

Danke naumann, das hilft mir weiter!

@Kai: Bei mir kommt es oft vor, dass ich tables manuell im Codebehind zusammenstricken muss.

Ich hab z.B. verschiedene Conditionals, beim einen wird die Zeile angehängt, beim anderen die andere etc., zudem benutze ich Funktion Calls in einzelnen Zeilen wie z.B.:


sb.Append("<td class=\"c19\">" + lng.wkLow(Master.lngIX) + "</td><td class=\"c19\">&nbsp;</td><td class=\"c19\">&nbsp;</td></tr>");

Ich hätte keine Ahnung wie ich das mit einem Gridview alles hinbekommen würde..

1.130 Beiträge seit 2005
vor 17 Jahren

Es gibt ja nicht nur das GridView, sondern auch andere Controls die Daten darstellen können. Methoden kannst Du ebenfalls aufrufen, sobald eine Zeile erstellt wird. Wenn es sich natürlich um eine nicht lineare Tabelle handelt ist das schwieriger

P
Paulo Themenstarter:in
172 Beiträge seit 2005
vor 17 Jahren

Also ich versuch gerade die Tabelle mal mit einer ASP.NET Table zusammenzuflicken aber das ist schon ziemlich viel Arbeit.. also mehr als mit dem StringBuilder aber es eröffnet natürlich die Möglichkeiten Controls zu adden.

P
Paulo Themenstarter:in
172 Beiträge seit 2005
vor 17 Jahren

Table mytable = new Table();
        mytable.BorderWidth = 2;

Er setzt aber immer:
<table border="0" style="border-width:2px;border-style:solid;">

Dieses border="0" ist default, kann man das auch editieren?

P
Paulo Themenstarter:in
172 Beiträge seit 2005
vor 17 Jahren

mytable.GridLines = GridLines.Both;

ises..