Avatar billede fun22 Nybegynder
25. oktober 2007 - 19:02 Der er 7 kommentarer og
1 løsning

Problem med array

Hej

Jeg har følgende funktion til at tilføje til array liste:

ProductIDArray.Add(GridView2.SelectedRow.Cells(0).Text)
ProductArray.Add(GridView2.SelectedRow.Cells(1).Text)
CountArray.Add("1")
PriceArray.Add(GridView2.SelectedRow.Cells(3).Text)

Og så har jeg følgende der udskriver:

Dim I As Integer

        If ProductIDArray.Count > 0 Then
            For I = 0 To ProductIDArray.Count

                Dim dr As TableRow = New TableRow
                Dim dc As TableCell = New TableCell

                dc.Text = ProductIDArray.Item(I).ToString
                dc.HorizontalAlign = HorizontalAlign.Center
                dr.Cells.Add(dc)

                dc = New TableCell
                dc.Text = ProductArray.Item(I).ToString
                dc.HorizontalAlign = HorizontalAlign.Center
                dr.Cells.Add(dc)

                dc = New TableCell
                dc.Text = CountArray.Item(I).ToString
                dc.HorizontalAlign = HorizontalAlign.Center
                dr.Cells.Add(dc)

                dc = New TableCell
                dc.Text = PriceArray.Item(I).ToString
                dc.HorizontalAlign = HorizontalAlign.Center
                dr.Cells.Add(dc)

                dc = New TableCell
                dc.Text = CountArray.Item(I) + PriceArray.Item(I)
                dc.HorizontalAlign = HorizontalAlign.Center
                dr.Cells.Add(dc)

                Table1.Rows.Add(dr)
            Next
        End If

Men den udskriver intet.. Og jeg har prøvet med en MsgBox at udskrive en af array'erne og der ligger noget i dem...

Nogen der ved hvad der kan være galt??
Avatar billede neoman Novice
25. oktober 2007 - 19:27 #1
ProductArray.Add(GridView2.SelectedRow.Cells(1).Text) skal være
ProductArray.Add(Server.HtemlDecode(GridView2.SelectedRow.Cells(1).Text))

hvis du har tekster, og du IKKE har sat HtmlEncode=False på kolonnerne - ellers får du vrøvl med æøå

Din array-ting dør nok under kørslen : For I = 0 To ProductIDArray.Count skal være
For I = 0 To ProductIDArray.Count-1
Avatar billede fun22 Nybegynder
25. oktober 2007 - 21:43 #2
Det virker stadig ikke.. Nu har jeg endda prøvet at fjerne if sætningen...
Avatar billede fun22 Nybegynder
25. oktober 2007 - 21:44 #3
Det hele ser således ud:

Public ProductIDArray As New ArrayList
    Public ProductArray As New ArrayList
    Public CountArray As New ArrayList
    Public PriceArray As New ArrayList
    Public Ie As Integer = 0



    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim I As Integer
        For I = 0 To ProductIDArray.Count - 1

            Dim dr As TableRow = New TableRow
            Dim dc As TableCell = New TableCell

            dc.Text = ProductIDArray.Item(I).ToString
            dc.HorizontalAlign = HorizontalAlign.Center
            dr.Cells.Add(dc)

            dc = New TableCell
            dc.Text = ProductArray.Item(I).ToString
            dc.HorizontalAlign = HorizontalAlign.Center
            dr.Cells.Add(dc)

            dc = New TableCell
            dc.Text = CountArray.Item(I).ToString
            dc.HorizontalAlign = HorizontalAlign.Center
            dr.Cells.Add(dc)

            dc = New TableCell
            dc.Text = PriceArray.Item(I).ToString
            dc.HorizontalAlign = HorizontalAlign.Center
            dr.Cells.Add(dc)

            dc = New TableCell
            dc.Text = CountArray.Item(I) + PriceArray.Item(I)
            dc.HorizontalAlign = HorizontalAlign.Center
            dr.Cells.Add(dc)

            Table1.Rows.Add(dr)
        Next

    End Sub

    Protected Sub GridView2_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView2.SelectedIndexChanged
        ProductIDArray.Add(Server.HtmlDecode(GridView2.SelectedRow.Cells(0).Text))
        ProductArray.Add(Server.HtmlDecode(GridView2.SelectedRow.Cells(1).Text))
        CountArray.Add("1")
        PriceArray.Add(Server.HtmlDecode(GridView2.SelectedRow.Cells(2).Text))

        MultiView1.ActiveViewIndex = 0
    End Sub
Avatar billede neoman Novice
25. oktober 2007 - 22:03 #4
Det er lidt &%¤/-up.

Du starter med en bunke tomme arrays.

Så kører der et SelectedIndexChanged event ,som fylder lidt i arrayet, men page_load er overstået, så din tabel bliver ikke gentegnet.

Du skal klippe den ting ud af page_load og lægge den i en separat sub ,som du skal kalde fra dit IndexChanged event.

Hvis det også skal overleve turen til næste postback, så skal du gemme array-værdierne i session eller viewstate, og gentegne din tabel ved page_load, ved at hente værdierne og kalde den sub fra Page_Load.
Avatar billede neoman Novice
25. oktober 2007 - 22:15 #5
Rettelse: du behøver egentligt ikke gemme værdierne - det gør frameworket for dig vha. ViewState. Det eneste du skal gøre for at gense værdierne ved næste page load, er at gentegne tabllen og cellerne, i samme antal som før. Så skal frameworket nok selvfylde værdierne på. Det kan huske værdierne, men for dynamiske kontroller husker det ikke kontrollerne selv, så de skal genoprettes.

For at slippe for alt dette her kunne du i stedet lave dette nummer: http://www.eksperten.dk/spm/795800 en repeater overlever nemlig en tur-retur, og man har ikke bøvlet med at huske hvor mange rækker det nu er man skal genskabe.
Avatar billede neoman Novice
25. oktober 2007 - 22:48 #6
Du kan læse lidt om det her : http://www.eksperten.dk/artikler/1103 bemærk især Page Life Cycle oveview i afsnit 3.
Avatar billede fun22 Nybegynder
27. november 2007 - 17:19 #7
Smider du et svar neoman?
Avatar billede fun22 Nybegynder
30. december 2007 - 09:49 #8
Lukker..
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