ASP.Net: ListItem umwandeln in UserControl
Ich verwende seit mehreren Jahren eine Listview-Control von Telerik, bei dem ich aber regelmäßig die Fehlermeldung bekomme, dass der Index fehlerhaft sei und sobald ich den Fehler prüfen möchte, ist der Fehler im Debugger verschwunden.
Alle List-Controls haben generell den Nachteil, dass man den Listen-Inhalt pro Item mit einem Template einstellen kann und dann das Listcontrol oder GridView Control mit der Bind Methode automatisch komplett füllt,
aber gleichzeitig hat man mit dieser einzelnen Lade-Methode keinen weiteren Zugriff mehr auf die Elemente.
Das heißt wie in diesem Beispiel, dass sporadisch angezeigt wird, dass angeblich die List-Binding Datenquelle fehlerhaft oder null sei, aber es könnte auch ein Seitenumbruch oder ähnliches sein. Man hat halt keinen weiteren Zugriff auf dieses recht praktische Control.
Deshalb kann man Listen in Asp.Net auch sehr gut und schnell selber erstellen. Entweder erstellt man ein Table Objekt und lädt dieses Zeile für Zeile mit HTML Elementen oder man kann ein UserControl für die Zeilenelemente erstellen und dann eine Tabelle zur Laufzeit mit Usercontrol Zeilen laden.
Dadurch bekommt man auch gleichzeitig die erweiterte Möglichkeit, eine Liste dynamisch zur Laufzeit zu gestalten. Besondere Zeilen können zum Beispiel farblich hervorgehoben werden und somit variieren.
Ich werde deshalb dieses Listview Control umbauen in eine Tabelle, die mit Usercontrols geladen wird.
Der bisherige Aufbau in ASP.Net ->XAML zeigt, wie das Listview hier von Telerik, aus der umfassenden Definition in der ersten Zeile besteht und im innern aus
Dem LayoutTemplate, das ist der Header und dem ItemTemplate, das sind die Zeilen besteht.
Die Zeilen zur Laufzeit werden mit den Dateninhalten durch das Binding gefüllt.
Dabei wird der Inhalt eines Datensatz Feldes übertragen mit: <%# Eval("Feldname<")%>
telerik:RadListView ID="ctlListview" runat="server" AllowPaging="false" DataKeyNames="IDDetail" ItemPlaceholderID="pnlItems" PageSize="100" Width="100%" ViewStateMode="Enabled" >
<LayoutTemplate>
<fieldset id="FieldSet2" style="padding-right:20px ;width: auto; border: 0px;">
<legend>Infos:</legend>
<asp:Panel ID="pnlItems" runat="server">
</asp:Panel>
</fieldset>
</LayoutTemplate>
<ItemTemplate>
<div style="float: left; width: 100%; ">
<table style="width: 100%; padding: 0; border-spacing: 0;">
<tr style="height: 30px;">
<td rowspan="2" style="width: 160px;max-height:160px;vertical-align:top;"><%----------< Thumbnail >----------%>
<a href='Details?d=<%#Eval("IDDetail")%>&a=<%#Eval("IDArea")%>&f=<%#Eval("IDFolder")%>&l=<%=_IDLanguage%>&t=<%#Eval("sTitleURL")%>' style="color: blue; border:0;">
<img alt="<%#Eval("sTitle")%>" src="<%#Eval("Thumbnail_URL")%>" title="<%#Eval("sTitle")%>" style="max-width:160px;max-height:160px;min-width:160px;padding-right:10px;"/>
</a>
<%----------< Thumbnail >----------%></td>
<td style="width: auto; padding-left: 5px; font-family: 'Arial Rounded MT'; font-size: large; vertical-align: top;">
<a href='Details?d=<%#Eval("IDDetail")%>&a=<%#Eval("IDArea")%>&f=<%#Eval("IDFolder")%>&l=<%=_IDLanguage%>&t=<%#Eval("sTitleURL")%>' style="color: blue; font-family: Arial;"><%# Eval("sTitle")%></a>
</td>
<td style="width:100px;text-align:right;">
<%#Eval("sDateCreated")%> <%#Eval("nVisits")%>
</td>
</tr>
<tr>
<td style="width: auto ; padding-left: 5px; vertical-align: top; font-size: medium;">
<%#Eval("sText")%></td>
</tr>
</table>
<hr style="border-bottom-style:dashed;border-top-style:none; border-color:gray;border-width:1px"/>
</div>
</ItemTemplate>
</telerik:RadListView>
|
Der Umbau in eine Liste mit Usercontrols wird nun der sein, dass man ein Usercontrol in ASP.Net erstellt und dieses als HTML Tabelle einstellt
Und im Schritt zwei erstellt man im Hauptformular eine Tabelle und lädt dieses Zeile für Zeile mit Usercontrols