Toon posts:

[ASP.NET] Dataset uitlezen met repeaters

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een dataset die ik vul met een DataAdapter, nu wil ik alle data uit die dataset hebben dmv een aantal repeaters te gebruiken (wil geen datagrid)

Ik heb het nu zo gemaakt dat de kolom namen en de data met verschillende repeaters gegenereerd wordt. De kolom namen krijg ik al goed te zien maar de data krijg ik niet voor elkaar :(

De data loop ik nu met 2 repeaters, de eerste loopt alle rows (dat werkt nog) en de 2e zou alle gegevens in die row moeten loopen maar dat werkt niet...

Dit is me aspx file:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<div style="OVERFLOW: scroll; WIDTH: 600px">
    <table class="infotbl" cellSpacing="1" width="100%">
        <tr>
            <asp:repeater id="QueryHeader" runat="server">
                <ItemTemplate>
                    <th>
                        <%# DataBinder.Eval(Container.DataItem, "Caption") %>
                    </th>
                </ItemTemplate>
            </asp:repeater>
        </tr>
        <asp:repeater id="QueryRows" runat="server">
            <ItemTemplate>
                <tr>
                    <asp:Repeater id="QueryRow" DataSource='<%# DataBinder.Eval(Container.DataItem, "ItemArray") %>' runat="server">
                        <ItemTemplate>
                            <td><%# DataBinder.Eval(Container.DataItem, "idk") %></td>
                        </ItemTemplate>
                    </asp:Repeater>
                </tr>
            </ItemTemplate>
        </asp:repeater>
    </table>
</div>

En dit is een stukje uit de code-behind waar de data gebind wordt:
code:
1
2
3
            QueryHeader.DataSource = dsQuery.Tables("Result").Columns
            QueryRows.DataSource = dsQuery.Tables("Result").Rows
            DataBind()


Weet iemand hoe dit moet?

  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

misschien
code:
1
2
QueryHeader.DataBind();
QueryRows.DataBind();

Je code weet nu niet waarmee ie de data moet binden.

| Life is a game (and games are fun) | homepage |


Verwijderd

Topicstarter
Nee dat is het niet 'DataBind()' doet dat, en ik zie de kolom namen al dus tot zo ver werkt het :)

Verwijderd

Topicstarter
*klein schopje*

/me hides from mods

Is dit een belachelijke manier of is het gewoon zo moeilijk dat niemand het weet :P

  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
krijg je wel <tr>'s te zien ?

Verwijderd

Topicstarter
Ja, ook de <td>'s nog alleen de waardes niet, zoals je ziet gebruik ik nu <%# DataBinder.Eval(Container.DataItem, "ItemArray") %> als datasource voor de <td>'s (Weet niet of dat goed is) nu hoef ik alleen nog de waardes zelf te hebben :P

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 28-02 19:26
Anders probeer eens om te werken met 1 control waarvan je de onDatBind events afvangt :).
Iets efficiënter om dat door een goed opgebouwde tabel te lopen.
Daarnaast kan ik je wel verklaren hoe het werkt:
Op het moment dat Reapaeter 'head' gaat binden, is het niet meer in staat om een ronde te parsen.
.Net handelt eerst customcontrols af, daarna de eigen (web)controls, gevolgd door de htmlcontrols om vervolgens de code behind aan te spreken.

Edit: Je kunt ook eens kijken of je niet je eigen control kunt schrijven voor dit soort zaken. Een RepeaterHierachlie zou wel leuk zijn :).

[ Voor 15% gewijzigd door Alex op 01-06-2005 23:53 ]

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
als je wel td's krijgt, dan werkt databinden in databinden dus helemaal

enkel je eval functie van de binnenste databind levert een lege string op.

wat je kan proberen is die databinder.eval vervangen door een protected/public functie in de codebehind waar je de container.dataitem aan meegeeft (en een string returned). Dan kan je een break-point setten en kijken wat er mis gaat met het ophalen van de value.

Verwijderd

Topicstarter
:D het werkt!

Alles is het zelfde behalve
code:
1
2
3
4
5
                    <asp:Repeater id="QueryRow" DataSource='<%# DataBinder.Eval(Container.DataItem, "ItemArray") %>' runat="server">
                        <ItemTemplate>
                            <td><%# GetCellValue(Container.DataItem) %></td>
                        </ItemTemplate>
                    </asp:Repeater>


code:
1
2
3
4
5
6
7
    Public Function GetCellValue(ByVal DataItem As Object) As String
        Dim Cell As String
        Cell = DataItem
        Cell = Globals.Breaks(Cell)
        Cell = Server.HtmlEncode(Cell)
        Return DataItem
    End Function


Ik snap niet helemaal precies hoe dat kan werken maargoed het werkt :P

thx :)

Verwijderd

Verwijderd schreef op donderdag 02 juni 2005 @ 09:21:
:D het werkt!

Alles is het zelfde behalve
code:
1
2
3
4
5
                    <asp:Repeater id="QueryRow" DataSource='<%# DataBinder.Eval(Container.DataItem, "ItemArray") %>' runat="server">
                        <ItemTemplate>
                            <td><%# GetCellValue(Container.DataItem) %></td>
                        </ItemTemplate>
                    </asp:Repeater>


code:
1
2
3
4
5
6
7
    Public Function GetCellValue(ByVal DataItem As Object) As String
        Dim Cell As String
        Cell = DataItem
        Cell = Globals.Breaks(Cell)
        Cell = Server.HtmlEncode(Cell)
        Return DataItem
    End Function


Ik snap niet helemaal precies hoe dat kan werken maargoed het werkt :P

thx :)
Moet het niet zijn 'Return Cell' :?

Verwijderd

Topicstarter
owja oops lol thx :P
Pagina: 1