Man brukar få det där felmeddelandet när exempelvis en Repeater inte är deklarerad i codebehind. Har du skrivit
protected withevents Visatext as repeater
på något ställe i din codebehind-klass? Gör i så fall det. :D
7 svar · 691 visningar · startad av Daniel78
Hej, jag försöker skriva ut lite info från en Access databas till en Repeater kontroll. SQL-satsen är testad i Access och ger resultat. Jag får ett konstigt fel
Objektvariabel eller With-blockvariabel har inte angetts.
Och hänvisningen är till denna bit kod:
html blahaha...<%#Container.DataItem("Info_Rubrik")%>
Hela Repeatern ser ut så här:
<table width="198" border="0" cellpadding="0" cellspacing="0" class="text">
<asp:repeater id="Visatext" runat="server">
<HeaderTemplate>
<tr>
<td style="PADDING-LEFT: 7px;BACKGROUND: url(bilderh/smalltable2_01.gif);PADDING-TOP: 0px;HEIGHT: 23px"> <strong><%#Container.DataItem("Info_Rubrik")%></strong></td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td style="PADDING-LEFT: 5px;BACKGROUND: url(bilderh/smalltable2_02.gif)"><%#Container.DataItem("Info_Text")%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
<tr>
<td style="BACKGROUND: url(bilderh/smalltable2_03.gif);HEIGHT: 5px"></td>
</tr>
</FooterTemplate>
</asp:repeater>
</table>
Och VB koden i Codebehind:
Dim mySQL As String
mySQL = "SELECT * FROM (tblInformation INNER JOIN tblKoppling ON tblInformation.Info_ID=tblKoppling.Typ_ID) INNER JOIN tblBilder ON tblKoppling.Bild_ID=tblBilder.Bild_ID;"
Dim myCmd As New OleDbCommand(mySQL, myConnection)
Visatext.DataSource = myCmd.ExecuteReader
Visatext.DataBind()
Någon ser om det är något fel?
Man brukar få det där felmeddelandet när exempelvis en Repeater inte är deklarerad i codebehind. Har du skrivit
protected withevents Visatext as repeater
på något ställe i din codebehind-klass? Gör i så fall det. :D
Jo, den har jag deklarerat, så det är något annat som spökar. :l
Ok, nu har jag tagit bort första "containern" från <HeaderTemplate> och placerat den inom <ItemTemplate> och då fungerar det! Nu till nästa fråga, ska man inte kunna placera någon container i <HeaderTemplate>? :q
Nej, det går inte. Headern ska användas som just en header med kod som inte ska upprepas, exempelvis (pseudokod):
<repeater>
<header>
<Table><tr>
</header>
<item>
<td>
<%#Container.DataItem("blah")%>
</td>
<footer>
</tr></table>
</footer>
</repeater>
På så sätt kan du bygga upp tabeller, skriva rubriker på dina listor etc på ett korrekt sätt. Det är bara itemtemplate och alternatingitemtemplate som itereras/upprepas från din datakälla. Naturligtvis kan du även ha dynamiska element så som en label eller en textbox i din header.
Såå... nu har jag en fråga! Går det att visa information från en databas (eller annan extern källa) i HeaderTemplate ändå? Går det helt enkelt över huvud taget? :)
Japp det går utmärkt om du använder dig av ItemDataBound eventet.
Eftersom du kommer att gå in i detta event även när du "är i headern". Tyvärr har du ingen data att tillgå då (har jag för mig), men den kan du ju hämta ut en gång till från databas.
- M
Du kan även skyffla in data manuellt på samma sätt som jag visade i en liknande fråga här för några dagar sedan genom att söka upp en kontroll i headern och sätta dess egenskaper så här:
http://www.webforum.nu/showthread.php?s=&postid=793448#post793448