[ASP .NET] Array van Checkbox's @ runtime maken en lezen

Pagina: 1
Acties:

  • dixon
  • Registratie: Januari 2001
  • Laatst online: 01-01 21:15
De CheckBox's zijn wel VB .Net checkbox's, maar dynamisch opgebouwd. Reden hiervoer is dat ze in een tabel komen te staan, die ook dynamisch word opgebouwd. Misschien moet ik hier al anders beginnen, met een of andere Grid ofzo, maar dat zou ik niet weten.

Het opbouwen is gelukt. Bij On Page Load wordt de tabel tblPersons dynamisch opgebouwd, en daarbij een array van CheckBox's aan toegevoegd. Hier een stukje van de code, kaalgeplukt weliswaar:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim objEvent As New CEvent(Val(Request("ID_Event")))
Dim objEventUser As CEventUser

For Each objEventUser In objEvent.Users

            Dim rowHtml As New HtmlTableRow
            Dim celHtml As New HtmlTableCell

                    intCBTeller += 1

                    ReDim Preserve chkBox(intCBTeller)
                    chkBox(intCBTeller) = New CheckBox
                    chkBox(intCBTeller).ID = "CheckBox" & intCBTeller.ToString
                    chkBox(intCBTeller).Checked = objEventUser.blnPayed
                    chkBox(intCBTeller).Visible = True

                    celhtml.Controls.Add(chkBox(intCBTeller))
                    rowHtml.Cells.Add(celHtml)
Next
tblPersons.Rows.Add(rowHtml)


Dit gaat goed, alleen nu moet ik de eventuele wijzigingen van de checkbox's op kunnen slaan. Nu zijn de CheckBox's al klikbaar en ik heb een mooi 'wijzigingen doorvoeren'-button.

Het probleem is nu, hoe krijg ik de checked (True/False) state van de checkbox's terug. De ID's zijn zoals je in de code kan zien CheckBox1, 2, etc. Het liefst loop ik weer door dezelfde loop als hierboven, met een checkbox teller, maar als het anders moet, hoor ik het graag. Op een andere website las ik dat ze een checkbox in een placeholder deden, maarja hoe doe ik dat dan? Moet ik alle checkbox's in 1 (in design time gecreeerde) placeholder stoppen, of moet ik voor elke checkbox dynamisch een placeholder opbouwen? Ik snap dat niet helemaal. Ik las ook ergens op een website dat ze met een loop door alle controls op de page liepen, en daarbij checken of het item een checkbox was of niet. Lijkt me ook niet een al te beste methode.

Ik heb op google gezocht, en vrij veel gevonden, maar ben er niet uitgekomen. Misschien kan ik beter met een CheckBoxList werken, maar ik weet ook niet hoe dat werkt.

Ik moet zoiezo zeggen dat elke keer als ik wil communiceren tussen controls op de page en de asp .net codebehind dat ik ontzettend moet kloten. Hier moet toch een makkelijkere manier voor zijn? Of doe ik het nou fout? Nog 1 keer mn uiteindelijke vraag: Hoe krijg ik de waardes van dymanisch opgebouwde TextBox's terug (naar m'n codebehind)?

In de Klasse CEventUsers worden de gegevens weer opgeslagen, naar een database. Dat werkt allemaal perfect.

ps: zoals je merkt ben ik nog steeds in de leerfase met .net, dus als ik iets raars zeg, corrigeer me a.u.b. :)

[ Voor 3% gewijzigd door dixon op 27-04-2004 14:00 . Reden: code foutje ]

Wat een onzin..


  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Leerfase en dynamische controls zijn 2 dingen die niet samengaan in ASP.Net .. Maar goed;
je kan de waarden weer terugvragen dmb
CType(Me.Findcontrol("IDVanJeTextBox"),TextBox).Text

Zie trouwens ook http://gathering.tweakers...message/19420338#19420338; je gaat ws namelijk volledig de mist in met je controlcollection en postbacks op dit moment.

ASP.Net heeft geen eigen ondersteuning voor CheckBox Columns. Deze zul je zelf moeten maken mbv een TemplateColumn. De feitelijke implementatie moet dan ITemplate implementeren.

[ Voor 57% gewijzigd door gorgi_19 op 27-04-2004 14:09 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • dixon
  • Registratie: Januari 2001
  • Laatst online: 01-01 21:15
Ah, ITemplates :) Ik denk dat ik eerst nog even wat moet gaan lezen van het zwarte boek :) Thanks for ur help, ik ga dit wel even proberen:
CType(Me.Findcontrol("IDVanJeTextBox"),TextBox).Text


Wat ik nu net geprobeerd heb, is aan het eind van de page load het volgende, gewoon om te kijken of ik de true/false waardes terugkrijg:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        If Page.IsPostBack = True Then
            'Dim intCBTeller As Integer
            Dim bln_arrPayed() As Boolean

            intCBTeller = 0

            Dim cb As Control

            For Each cb In tblPersons.Controls
                intCBTeller += 1
                ReDim Preserve bln_arrPayed(intCBTeller)
                bln_arrPayed(intCBTeller) = CType(cb, CheckBox).Checked
            Next
        End If


Hierbij krijg ik de error:
Exception Details: System.InvalidCastException: Specified cast is not valid.

uiteraard op regel:
Line 279: bln_arrPayed(intCBTeller) = CType(cb, CheckBox).Checked

En hier de stack trace:
[InvalidCastException: Specified cast is not valid.]
TESTEventDetails.Page_Load(Object sender, EventArgs e) in D:\projects\Websites\TEST\Events\EventDetails.aspx.vb:279
System.Web.UI.Control.OnLoad(EventArgs e)
System.Web.UI.Control.LoadRecursive()
System.Web.UI.Page.ProcessRequestMain()

[ Voor 76% gewijzigd door dixon op 27-04-2004 14:12 ]

Wat een onzin..


  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Verder is een CheckBoxList in dit geval ook geen verkeerde oplossing.
Hierbij krijg ik de error:
Exception Details: System.InvalidCastException: Specified cast is not valid.
Da's logisch, aangezien niet alle controls, toegevoegd aan tblPerson controlcollection, van het type checkbox zijn.

[ Voor 64% gewijzigd door gorgi_19 op 27-04-2004 14:15 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • dixon
  • Registratie: Januari 2001
  • Laatst online: 01-01 21:15
Oke, het lijkt nu goed te werken :) Natuurlijk even mn code opruimen, maar ik krijg de waardes door. Super bedankt!

Wat een onzin..