Avatar billede fgsupermand Nybegynder
09. januar 2005 - 18:29 Der er 18 kommentarer og
1 løsning

nested repeater (c#)

Jeg har før lavet nested repeater's med VB.NET, men nu bruger jeg C# og det giver nogle problemer.

Med vb kan man skrive således:
<asp:Repeater id="users" runat="server" > 
  <HeaderTemplate>
    <table>
  </HeaderTemplate>           
  <ItemTemplate>
      <tr>   
    <td><%# Container.DataItem("ip") %></td>
    <td><%# Container.DataItem("host") %></td>
        <td>
      <table>
            <tr>                                          <asp:Repeater id="hits" runat="server" datasource='<%# Container.DataItem.Row.GetChildRows("rel") %>' >           
                <ItemTemplate>                                          <td><%# Container.DataItem("time") %></td>
                  <td><%# Container.DataItem("page") %></td>
                </ItemTemplate>
              </asp:Repeater>
            </tr>
          </table>
        </td>
      </tr>
   
  </ItemTemplate>
  <FooterTemplate>
    </table>
  </FooterTemplate>                     
</asp:Repeater>

det er denne linje der giver problemer:
<asp:Repeater id="hits" runat="server" datasource='<%# Container.DataItem.Row.GetChildRows("rel") %>' >

Kan den "oversættes" direkte til c# ?
Avatar billede snepnet Nybegynder
09. januar 2005 - 18:34 #1
hvad er det for problemer du får ?
prøv eventuelt :
<asp:Repeater id="hits" runat="server" datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("rel") %>' >
mvh
Avatar billede fgsupermand Nybegynder
09. januar 2005 - 18:40 #2
jeg får denne fejl:
"DataBinder.Eval: 'System.Data.DataRow' indeholder ikke en egenskab med navnet time."

med time findes, jeg har fået udskrevet indholdet af hele dataset'et


jeg har prøvet med:
<asp:Repeater id="hits" runat="server" datasource='<%# ((System.Data.DataRowView)Container.DataItem).Row.GetChildRows("rel") %>' >

(hvis jeg bare skriver DataRowView så kommer den op og siger: "mangler der et 'using'-direktiv eller en assemblyreference?"
Avatar billede snepnet Nybegynder
09. januar 2005 - 18:47 #3
DataRowView ligger i System.Data - så den skal du have importeret i din aspx-fil, eller skrive den fuldt ud (som du så også har gjort).
jeg tror ikke den fejl (time) har noget at gøre med den sætning du skrev gav problemer.

det virker nærmere som om det er denne :
Container.DataItem("time")

prøv at skriv den som :
Databinder.Eval(Container.DataItem, "time"))

eller sådan her :
((DataRowView)Container.DataItem)["time"] %>

der er også andre muligheder.

mvh
Avatar billede fgsupermand Nybegynder
09. januar 2005 - 18:53 #4
Det med imports undre mig også en del, fordi jeg har "using System.Data;" i min aspx.cs fil

Det som jeg skrev i mit spørgsmål var vb kode, så jeg har selvfølgelig ikke det samme i min c# kode. Der bruger jeg
Databinder.Eval(Container.DataItem, "time"))

som du også skriver.
Avatar billede snepnet Nybegynder
09. januar 2005 - 19:19 #5
hvis du vil bruge navnene uden fuld angivelse i aspx-filen, skal du også importere namespacet der - altså bare med en :
<%@ import Namespace="System.Data" %>

må jeg prøve at se den relevante del af din aspx-kode som den ser ud nu ?

mvh
Avatar billede fgsupermand Nybegynder
09. januar 2005 - 19:26 #6
hmm jeg troede aspx og codebehind blev sat sammen inden compile men what ever.

ja her kommer noget af c# koden:
<asp:Repeater id="users" runat="server" > 
<HeaderTemplate>
  <table>
</HeaderTemplate>     
<ItemTemplate>
  <tr>   
    <td><%# DataBinder.Eval(Container.DataItem, "id") %></td>
    <td><%# DataBinder.Eval(Container.DataItem, "hostname") %></td>
    <td><%# DataBinder.Eval(Container.DataItem, "ip") %></td>
    <td>
      <table>
        <tr>
          <asp:Repeater id="hits" runat="server" datasource='<%# ((System.Data.DataRowView)Container.DataItem).Row.GetChildRows("uniquehits") %>' >         
            <ItemTemplate>
              <td><%# DataBinder.Eval(Container.DataItem, "time") %>/td>
              <td><%# DataBinder.Eval(Container.DataItem, "referrer") %></td>
              <td><%# DataBinder.Eval(Container.DataItem, "page") %>/td>
              <td><%# DataBinder.Eval(Container.DataItem, "agent") %></td>
            </ItemTemplate>
          </asp:Repeater>
        </tr>
      </table>
    </td>
  </tr> 
</ItemTemplate>
<FooterTemplate>
  </table>
</FooterTemplate>
</asp:Repeater>
Avatar billede snepnet Nybegynder
09. januar 2005 - 19:29 #7
og du er self. 100 på at du har hvad der skal være i dit dataset eller ?
hvad sker der hvis du bare gør sådan her :

            <ItemTemplate>
              <td><%# Container.DataItem.ToString() %>/td>
            </ItemTemplate>

mvh
Avatar billede fgsupermand Nybegynder
09. januar 2005 - 19:34 #8
ja, hvis jeg skriver dataset'et ud som xml så ser det sådan her ud:
<uniqueHits>
  <hits>
    <userid>10</userid>
    <time>2005-01-10T19:00:57.0000000+01:00</time>
    <referrer />
    <page>/bjorneporno/Default.aspx</page>
    <agent>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0</agent>
  </hits>
  <hits>
    <userid>10</userid>
    <time>2005-01-09T18:59:46.0000000+01:00</time>
    <referrer />
    <page>/bjorneporno/Default.aspx</page>
    <agent>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)</agent>
  </hits>
  <hits>
    <userid>10</userid>
    <time>2005-01-08T18:58:20.0000000+01:00</time>
    <referrer />
    <page>/bjorneporno/Default.aspx</page>
    <agent>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0</agent>
  </hits>
  <users>
    <Id>10</Id>
    <Hostname>localhost</Hostname>
    <IP>127.0.0.1</IP>
  </users>
</uniqueHits>
Avatar billede snepnet Nybegynder
09. januar 2005 - 19:40 #9
kan du ikke prøve at lave sådan noget her i din codebehind, og se hvad du får ud af det ?

// hvis dit dataSet hedder data
DataRow[] childRows = data.Tables["users"].Rows[0].GetChildRows("uniquehits");

Hvis du debugger... har du så hvad du forventer i childRows ?

mvh
Avatar billede snepnet Nybegynder
09. januar 2005 - 19:41 #10
og ... må jeg se den kode du bruger til at sætte datasource på den "øverste" repeater ?
mvh
Avatar billede fgsupermand Nybegynder
09. januar 2005 - 20:53 #11
Ja når jeg debugger, så får jeg de rigtige værdier ud

her er indholdet af min codebehind:

protected System.Web.UI.WebControls.Repeater users;
protected System.Web.UI.WebControls.Repeater hits;

private void Page_Load(object sender, System.EventArgs e)
{
  DataSet data = db.Facade.getInstance().uniqueHits().Tables["users"];
  users.DataSource = data;
  users.DataBind();
}
Avatar billede snepnet Nybegynder
09. januar 2005 - 20:59 #12
hmm... der forsvæver mig et eller andet med at man ved nestede repeatere skal angive nogle \ - prøver lige at finde noget.
mvh
Avatar billede snepnet Nybegynder
09. januar 2005 - 21:00 #13
Her er noget her ... har du kigget den igennem ?
http://support.microsoft.com/default.aspx?scid=kb;EN-US;306154
mvh
Avatar billede fgsupermand Nybegynder
09. januar 2005 - 21:14 #14
jeps det sidste virkede :)

hvorfor der så lige skal står:
"[\"time\"]"
i stedet for
"time"
Det ved jeg ikke.

jeg siger mange tak for hjælpen. Men jeg vil gerne give dig flere point end 30 (hvis du vil have det)
Avatar billede snepnet Nybegynder
09. januar 2005 - 21:19 #15
det var godt det kom til at virke - det er også lidt af en finurlighed den der.
det er helt fint med de 30 (men du er self. fri til at gøre som du vil) - held og lykke med dit projekt.
mvh
Avatar billede fgsupermand Nybegynder
09. januar 2005 - 21:25 #16
hmm
Avatar billede snepnet Nybegynder
09. januar 2005 - 21:26 #17
brummer du :o)
Avatar billede fgsupermand Nybegynder
09. januar 2005 - 21:41 #18
jeg ville bare se om jeg kunne give flere point
Avatar billede snepnet Nybegynder
09. januar 2005 - 21:42 #19
ahh - det er helt ok :o)
mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester