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!
AppendFormat ?
string.Format ?
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
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.
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!
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.
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.
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\"> </td><td class=\"c19\"> </td></tr>");
Ich hätte keine Ahnung wie ich das mit einem Gridview alles hinbekommen würde..
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
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.
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?