Toon posts:

[ASP.NET/VB.NET] Gegevens plaatsen in een repeater

Pagina: 1
Acties:
  • 104 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
ik had al een ander topic gepost maar omdat dit een andere kant opgaat open ik nu een nieuwe.

Wat ik wil bereiken:
Een pagina waar de artikelen worden weergegeven die in het winkelwagentje zitten. Een e-shop dus. Per artikel wordt het volgende weergegeven: titel, aantal, prijs per stuk, totaal prijs en icon voor te verwijderen. Als het aantal van een artikel veranderd wordt, wil ik via TextCanged een functie aanroepen die dan het aantal bijwerkt. Als op het verwijder icon wordt geklikt wil ik dat het hele item wordt verwijderd uit de cart (=winkelwagentje)

Hoe werkt het winkelwagentje?
Ik heb een Class gemaakt die er alsvolgt uit ziet:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Class propCart
    Private intArtID As Integer
    Private intAantal As Integer = 1

    Public Property Aantal() As Integer
        Get
            Return intAantal
        End Get
        Set(ByVal Value As Integer)
            intAantal = Value
        End Set
    End Property

    Public Property ArtID() As Integer
        Get
            Return intArtID
        End Get
        Set(ByVal Value As Integer)
            intArtID = Value
        End Set
    End Property
End Class
Het aantal is dus standaard 1. Al deze items worden opgeslagen in een arraylist. Je krijgt dus een arrayList die vol zit met verschillende propCart Classes. De Titel en prijs wordt opgevraagd via het ArtikelID wat in het winkelwagentje staat.

Hoe worden de artikelen opgevraagd?
De titel en de prijs worden dus nav het artikelID opgevragen. De gegevens van het artikel worden in een class teruggegeven via een functie. Deze class is qua structuur vergelijkbaar met de class propCart alleen staan er dan andere gegevens in.

Wat lukt mij niet?
Om de juiste gegevens op de juiste plek te krijgen. De repeater doet het wel, maar de datasource van de repeater is de arrayList met de propCart Classes erin. Hierin staan dus alleen het ArtikelID en het Aantal in. Ik zou niet weten hoe ik deze gegevens op de juiste plek krijg en al helemaal niet hoe ik bijvoorbeeld de titel op de juiste plek krijg. De titel wordt immers opgevragen nav het ArtikelID uit de class propCart.
Tevens zou ik niet weten hoe ik een textbox in een repeater een functie moet laten aanroepen en hoe ik dan aan het ArtikelID kom.

Wat heb ik al geprobeerd?
Ik weet dat je via DataBind.Eval( etc..) de data kan binden op een plek. Maar omdat de repeater loopt doormiddel van de ArrayList met daarin als waardes de propCarts weet ik niet hoe ik daaruit de gegevens kan halen. Je kan in de repeater niet de huidige index van de arrayList opvragen zodat je iets met arrayList.Item( index ) kan doen. Verder zou je per artikel in de repeater een Variabele declareren waarin je de propCart classe kan stoppen. Dus iets van: Dim artRow As propCart = ArrayList.item(index). Dan zou je via artRow.ArtID wel de gegevens kunnen opvragen. Maar dat wil dus niet in een repeater.
En hoe je een functie laat aanroepen? Ik heb het volgende al in een TextBox gezet: onTextChanged="editAantal()". Maar ik krijg dan een foutmelding!
Ik heb ook al het internet afgespeurd maar je komt de repeater alleen maar tegen icm met een dataset en dat is dus niet wat van toepassing is.

Kortom .. wie kan me helpen?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06:54

gorgi_19

Kruimeltjes zijn weer op :9

Heeft een Repeater niet een DataBound-event oid, waarin je eea kan veranderen? En je moet een eigen TemplateColumn, welke ITemplate implementeert, maken. Met die info moet je er wel uit kunnen komen :)

[ Voor 14% gewijzigd door gorgi_19 op 17-06-2005 11:04 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
Ik heb ook al het internet afgespeurd maar je komt de repeater alleen maar tegen icm met een dataset en dat is dus niet wat van toepassing is.
als je even je vorige thread over hetzelfde onderwerp leest en dan een post tegen komt van mij, dan staat daar een linkje met uitleg hoe je je eigen gemaakte classes can databinden met een repeater.
En hoe je een functie laat aanroepen? Ik heb het volgende al in een TextBox gezet: onTextChanged="editAantal()". Maar ik krijg dan een foutmelding!
als je nog eens een keer je vorige thread over hetzelfde onderwerp leest, dan staat daar een linkje in naar de uitleg over hoe een repeater werkt. Lees dan extra aandachtig het stukje over 'itemcommand'

tip: als je iets niet snapt, ff de handleiding erbij om te lezen hoe het werkt. dan ff nadenken. dan proberen.

Verwijderd

Je kunt toch gebruik maken van bv:

<%# DataBinder.Eval(Container.DataItem, "URL") %>

Verwijderd

Topicstarter
ik ben al een stap verder. Ik heb inmiddels een datagrid die gevuld wordt
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
<asp:DataGrid ID="dgCart" Runat="server" AutoGenerateColumns="False" 
    EnableViewState="False" AlternatingItemStyle-BackColor="#eeeeee" GridLines="Horizontal"
    HeaderStyle-Font-Bold="True" HeaderStyle-BackColor="#cc3399" HeaderStyle-ForeColor="#FFFFFF" HeaderStyle-Height="20"
    ItemStyle-Height="20" CellPadding="0" BorderWidth="0" Width="100%" >
    <Columns>
        <asp:BoundColumn DataField="Titel" HeaderText="Titel" />
        <asp:BoundColumn DataField="Aantal" HeaderText="Aantal" />
        <asp:BoundColumn DataField="Prijs" HeaderText="Prijs" />
        <asp:BoundColumn DataField="Totaal" HeaderText="Totaal" />
    </Columns>
</asp:DataGrid>


De code die alles genereert is het volgende:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Private Sub getCart()
  Dim objSecure As New secure
  Dim totaalPrijs As Double
  Dim arlCart As ArrayList = Session("cart")
  Dim Cart As New DataTable
  Dim dr As DataRow
  Dim propCart As propCart
  Dim propArt As propArtikel
  Dim PrijsTotaal As Double

  Cart.Columns.Add(New DataColumn("Titel", GetType(String)))
  Cart.Columns.Add(New DataColumn("Aantal", GetType(Integer)))
  Cart.Columns.Add(New DataColumn("Prijs", GetType(Double)))
  Cart.Columns.Add(New DataColumn("Totaal", GetType(Double)))

  For i As Integer = 0 To (arlCart.Count - 1)
    propCart = arlCart(i)
    propArt = objSecure.getArtikelByID(propCart.ArtID) 

    dr = Cart.NewRow()

    dr(0) = propArt.Titel
    dr(1) = propCart.Aantal
    dr(2) = propArt.Prijs
    dr(3) = propArt.Prijs * propCart.Aantal
    PrijsTotaal = PrijsTotaal + (propArt.Prijs * propCart.Aantal)

    Cart.Rows.Add(dr)

    dr = Nothing
    propCart = Nothing
    propArt = Nothing
  Next

  dr = Cart.NewRow()
  dr(3) = PrijsTotaal
  Cart.Rows.Add(dr)

  dr = Nothing
  propCart = Nothing
  propArt = Nothing

  CartView = New DataView(Cart)
  dgCart.DataSource = CartView
  dgCart.DataBind()

  arlCart = Nothing
  objSecure = Nothing
End Sub


Ik moet alleen nog het textbox erin krijgen die op TextChanged reageert. En ook nog een verwijder icon! Als mensen commentaar/suggesties/opmerkingen hebben dan hoor ik dat graag!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06:54

gorgi_19

Kruimeltjes zijn weer op :9

Als je een datagrid gebruikt, waarom vraag je dan om hulp bij een repeater? :?

Maar goed; ook hier geldt: Voeg een templatecolumn toe, welke ITemplate implementeert.

[ Voor 33% gewijzigd door gorgi_19 op 17-06-2005 12:48 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 15:33
Voor een verwijder icon kan je een button/hyperlinkcolumn gebruiken. Voor de textbox een templatecolumn met een, jaja, texbox er in.

Roomba E5 te koop


Verwijderd

Topicstarter
weer even een update .. ik wordt er ondertussen helemaal gek van!
Het ITemplate idee heb ik laten varen want ik krijg dat naar een hele dag daaraan werken niet aan de praat.
Toen wou ik de aantallen aanpassen dmv 1 knop die alle aantallen herberekend. Code achter die button ziet er zo uit:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim strAs String

Private Sub btnHereken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHereken.Click
  Dim item As DataGridItem
  For Each item In dgCart.Items
    lblTotaal.Text &= "<br>" & item.Cells(0).Text & _
    " " & item.Cells(1).Text & _
    " " & item.Cells(2).Text
  Next item

  'Dim tb As TextBox = itm.Cells(1).Controls(1)
  'Str = Str() & tb.Text & vbCrLf
End Sub
De bedoeling is dus een loopje door de datagrid. Maar er zit helemaal niets dgCart.Items terwijl de datagrid toch echt wel gevuld is! Kan iemand me helpen??

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 28-02 19:26
ASP.NET:
1
2
3
4
<asp:DataGrid ID="dgCart" Runat="server" AutoGenerateColumns="False" 
    EnableViewState="False" AlternatingItemStyle-BackColor="#eeeeee" GridLines="Horizontal"
    HeaderStyle-Font-Bold="True" HeaderStyle-BackColor="#cc3399" HeaderStyle-ForeColor="#FFFFFF" HeaderStyle-Height="20"
    ItemStyle-Height="20" CellPadding="0" BorderWidth="0" Width="100%" > 


Mag ik je erop wijzen dat je hiervoor beter een CSS kutn gebruiken?
Ook als je je HTML nog wilt kunnen lezen als het door de .Net engine is geweest :).

Om antwoord te geven op je vraag: Je kent het princiepe databinding? Iets met DataSource = data die erin gaat en dan iets in de richting van DataBind();
Als ik je dan ene linkje geef, met een naam: 'DataMember', dan kom je eruit denk ik he :).
http://msdn.microsoft.com...taGridPropertiesTopic.asp

Het kan denk ik geen kwaad om deze tutorial eens extreem goed door te nemen :).(Je hebt mazzel, hij is in VB.Net en niet in C#.Net)

edit:

In de category van Google, mag ik de tutorial Creating DataGrid Templated Ciolumns Dynamically?
Oké: http://www.dotnetbips.com/displayarticle.aspx?id=84 ;)

[ Voor 16% gewijzigd door Alex op 18-06-2005 12:23 ]

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


Verwijderd

Topicstarter
ik die tutorials allang doorgenomen. Alles overgenomen. Dan werkt het nog niet! Ik snap er allemaal niets meer van!

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 28-02 19:26
Verwijderd schreef op zaterdag 18 juni 2005 @ 13:54:
ik die tutorials allang doorgenomen. Alles overgenomen. Dan werkt het nog niet! Ik snap er allemaal niets meer van!
Hen je al eens naar die DataSource en DataMembers gekeken?
Repeaters/DataGrids zijn de makelijkste controls na de Labels in .Net :).
Als ik je eerdere topics zie dan heb je al wel het nodige geprobeerd met .Net maar ben je een beetje ad hoc bezig.
Ben je nu wel op de makelijkste manier onderweg? Hoe goed heb je over die ding nagedacht?

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

Pagina: 1