Avatar billede kak Nybegynder
27. maj 2007 - 20:43 Der er 10 kommentarer og
1 løsning

Tilføje en tabel dynamisk i et formview

Jeg forsøger at tilføje en tabel dynamisk inde i et formview, men det virker ikke. Jeg lægger tabellen i en placeholder, og hvis jeg flytter denne placeholder udenfor mit formview, så virker det.

Her er koden fra .aspx.vb siden...

        While rs.Read
            Dim row As TableRow = New TableRow
            major_Table.Rows.Add(row)

            Dim cell1 As TableCell = New TableCell
            row.Cells.Add(cell1)
            cell1.Text = rs("name")
            row.Cells.Add(cell1)

        End While

        Dim ph1 As PlaceHolder
        ph1 = FormView1.FindControl("PlaceHolder1")
        ph1.Controls.Add(major_Table)



Og her er et udsnit af aspx-siden...

<asp:FormView ID="FormView1">

<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>

Nogen der kender løsningen?
Avatar billede neoman Novice
27. maj 2007 - 20:48 #1
Din major_Table - hvor er den ? Kan ikke se hvor den er defineret henne, og den ser hele ikke ud til at blive defineret dynamisk - i hvertfald ikke i den kode du har vist.
Avatar billede neoman Novice
27. maj 2007 - 20:56 #2
Desuden er det lidt svært at sige noget når man ikke kan se koden og dermed logikken. Hvornår bliver rækkerne tilføjet (dvs. hvilket event) - og husker du at genloade dem på alle efterfølgende postbacks ?
Avatar billede kak Nybegynder
27. maj 2007 - 22:20 #3
Nej, jeg har ikke vist hele koden, da der er ca. 1000 liniers irrelevant kode. major_table bliver defineret for oven i min aspx.vb fil:

Partial Class people
    Inherits System.Web.UI.Page
    Protected major_Table As Table = New Table

Som sagt virker det fint, hvis jeg flytter min placeholder ud fra formviewet, så jeg ved at koden bliver kørt hver gang siden reloades. Jeg har også lavet nogle msgbox, så jeg kan se om koden bliver kørt som forventet, og det gør den.
Avatar billede snepnet Nybegynder
28. maj 2007 - 01:10 #4
Du må finde tabellen ved at søge den i dit FormView
Dim t As Table = CType(FormView1.FinControl("major_Table", Table))
... Kan være det skal skrive på en anden måde - er ikke den store ørn til VB.
Mvh
Avatar billede kak Nybegynder
28. maj 2007 - 10:22 #5
Ok, det kan jeg godt følge, men den sætning får jo ikke vist tabellen?! Problemet er, at tabellen ikke bliver vist på siden, med mindre jeg flytter min placeholder udenfor mit formview.
Avatar billede kak Nybegynder
28. maj 2007 - 10:27 #6
Ahhh, tror jeg har fundet fejlen. Jeg bruger et multiview på siden, og sætter jeg min placeholder i det første view, vises den fint. Men den forsvinder når jeg skifter til et andet view og tilbage igen.

Så jeg skal blot have sat koden, så den kører ved hver reload. Vil I oprette et svar begge to, så jeg kan give point for jeres hjælp?
Avatar billede kak Nybegynder
28. maj 2007 - 11:41 #7
Jeg er stødt på et nyt problem, i forbindelse med samme tabel. Jeg har lavet nogle checkbokse i tabellen, og jeg vil gerne gemme de markeringer, som brugeren evt. sætter.

Men når jeg kalder min funktion til det, får jeg følgende fejl:
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Og de er på denne linie: For Each row As TableRow In m_table.Rows

Koden ser således ud:
        Dim m_table As Table
        m_table = CType(FormView1.FindControl("major_Table"), Table)
        For Each row As TableRow In m_table.Rows
            Dim cb As CheckBox = CType(row.Cells(2).Controls(0), CheckBox)

Spørgsmålet er, om tabellen endnu ikke er lavet, når jeg kalder funktionen til at gemme markeringerne?! Men hvordan kan jeg komme ud over det problem?
Avatar billede snepnet Nybegynder
28. maj 2007 - 11:45 #8
Du tilføje dine dynamiske kontroller hver gang - der er ikke noget der husker dem... Hvis du sørger for at tilføje kontroller i init, skulle den være fikset.
Du får et svar her som du skrev.
Mvh
Avatar billede kak Nybegynder
28. maj 2007 - 11:52 #9
Så lykkes det mig også at finde den løsning :-) Tabellen skal blot kaldes direkte med: For Each row As TableRow In major_Table.Rows

Ikke nogen med formview.findcontrol.
Avatar billede snepnet Nybegynder
28. maj 2007 - 15:15 #10
Jeg har måske misforstået det du har skrevet, men du kan ikke adresse en kontrol i en formview itemtemplate direkte:

Hvis du har et formview som det her:
<asp:FormView ID="FormView1" runat="server">
    <ItemTemplate>
        <asp:Table ID="someTable" runat="server"></asp:Table>
    </ItemTemplate>
</asp:FormView>
Kan du ikke kompilere noget der opererer direkte på
someTable.WhatEver - da someTable ikke bliver mappet til en klassevariabel af frameworket.

Skal du have fat i tabellen i ovenstående template, bliver du nødt til at gøre sådan her:
Table tbl = FormView1.FindControl("someTable") as Table; (eller noget tilsvarende vb).

Men hvis du ikke blot tilføjer rækken dynamisk, men også selve tabellen - er det self. en anden sag.

Mvh
Avatar billede neoman Novice
28. maj 2007 - 16:33 #11
Jeg afstår - ellers tak:)
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