webForumDet fria alternativet

Repeater ger fel

.NETur .NET

7 svar · 691 visningar · startad av Daniel78

Medlem sedan jan. 2001200 inlägg
Frågan#1

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">&nbsp;<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?

Medlem sedan sep. 20026 425 inlägg
#2

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

Medlem sedan jan. 2001200 inlägg
#3

Jo, den har jag deklarerat, så det är något annat som spökar. :l

Medlem sedan jan. 2001200 inlägg
#4

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

Medlem sedan juni 20011 732 inlägg
#5

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.

Medlem sedan sep. 20026 425 inlägg
#6

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? :)

Medlem sedan maj 20012 812 inlägg
#7

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

Medlem sedan juni 20011 732 inlägg
#8

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

131 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)