27. maj 2007 - 20:43Der 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)
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.
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 ?
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.
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
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.
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?
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?
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
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.
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.