Toon posts:

[ASP.NET] Aantal Dropdownlisten dynamisch aanmaken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,


Ik wil graag een dynamische webformulier maken nu heb ik al 2 Dropdownlisten met waardes, naar aanleiding van de gegevens die daarin staan, voer ik een query uit die resulteert in een aantal modules.

Deze modules heb ik opgeslagen in een array in de vorm van strings

Module 1:
Module 2:
enz

Het aantal modules is afhankelijk van de selectie die gegeven is!

Nu wil ik graag het volgende bereiken afhankelijk van het aantal modules dat er in de array staan wil ik een gelijk aantal labels & dropdownboxen krijgen(om deze vervolgens weer te vullen met data uit de databank maar das nu nog even niet belangrijk).

Nu vraag ik me af hoe ik dit het beste kan aanpakken.
Moet ik dit in de code tussen het form uitvoeren of kan ik dit al in een procedure helemaal voorbereiden.

Ik weet dat dit eigenlijk misschien een hele stommen vraag is maar omdat hier voldoende op internet over te vinden zou moeten zijn, Maar is mij niet gelukt een goede link te vinden met uitleg hierover.

Zou ik dit anders gewoon moeten aanpakken zoals in de klassieke asp zoiets als

<% do while " doorlopen van de array" %>
<asp:Label></label>
<asp:DropdownList>/<>
<%loop%>

in de body van de pagina zetten of deze manier van werken bij asp.net gewoon zeeeeer onlogisch of niet mogelijk


Misschien weten jullie een intressanten of hebben jullie een voorbeeld code voor mij.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 24-04 20:55

gorgi_19

Kruimeltjes zijn weer op :9

Aanmaken van de controls in de Init; vullen van waarden van de controls in de Load.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op woensdag 26 oktober 2005 @ 11:13:
Aanmaken van de controls in de Init; vullen van waarden van de controls in de Load.
Aanmaken in de init, dus op moment dat de pagina geladen wordt ?

Dus op moment dat het om een postback gaat, want de eerste keer hoeft ie ze nog niet te maken want dan heeft de gebruiker nog niet de juiste selectie gemaakt.

Ik dacht dit dus te gebruiken als onchangeselectedindex en dan de methode aanroepen die de rest van de pagina laat.

Dus dan zou ik dan de array moeten doorlopen en de controls aanmaken?

Ik weet dus pas na de selectie hoeveel dropdownboxen ik nodig heb dit varieert nammelijk bij iedere seectie

[ Voor 9% gewijzigd door Verwijderd op 26-10-2005 11:19 ]


Verwijderd

Sowieso niet in de init iets gaan aanpassen. Ik denk ook niet dat het werkt als je in de load een while loop een aantal dropdownboxes toevoegt... Misschien toch op de asp-manier.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:31

TeeDee

CQB 241

Verwijderd schreef op woensdag 26 oktober 2005 @ 12:52:
Ik denk ook niet dat het werkt als je in de load een while loop een aantal dropdownboxes toevoegt...
Hoezo zou dat niet werken?

Je kan imo prima
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void Page_Load(object sender, System.EventArgs e)
{
    if(!IsPostBack)
    {
        VulDropDowns()
    }
}

private void VulDropDowns()
{
    while ...
    {
        //vul je dropdowns
    }
}

Je kan bovenstaande while loop ook gewoon in je Page_Load doen.

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
TeeDee schreef op woensdag 26 oktober 2005 @ 13:12:
[...]

Hoezo zou dat niet werken?

Je kan imo prima
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void Page_Load(object sender, System.EventArgs e)
{
    if(!IsPostBack)
    {
        VulDropDowns()
    }
}

private void VulDropDowns()
{
    while ...
    {
        //vul je dropdowns
    }
}

Je kan bovenstaande while loop ook gewoon in je Page_Load doen.
Ja dat zie ik zo zou ik ze kunnen vullen je roept nammelijk in de page_load gewoon de procedure aan, maar ik zit met het probleem dat ik ze eerst moet maken

soms heb ik er 11 nodig en soms maar 6 afhankelijk van het soort stoel dat geselecteerd is.

Weet iemand hoe ik door mij array heen kan lopen via een for each loop.
Ik gebruik op dit moment VB.net maar ben er nog lang niet handig in dus zou nog om kunnen gaan en proberen C.net te gaan leren (aangezien ik redelijk java kan programmeren misschien wel makkelijker)

De Id geving had ik al gedacht door iets te gaan doen met Id='dropdown' & i' maar nu moet nog weten hoe ik deze controls kan aanmaken.

had al geprobeer om een procedure te maken die de controls ook in een array zet en dan in de code de array uit te lezen met een reponse.write.

Maar krijg de loop niet lopende

Verwijderd

Topicstarter
MM volgens mij heb ik wat gevonden ;)

Ik denk dat ik moet gaan werken met placeholder zodat ik de controls in een procedure kan maken en ze dan in het form gebruiken

En ja het is geluk gebruik een placeholder en maak de controls in de procedure :) :)

[ Voor 22% gewijzigd door Verwijderd op 26-10-2005 18:23 ]


Verwijderd

Topicstarter
Het is me gelukt om dynamische de boxen aan te maken maar nu heb ik een problem met het uitlezen.

Op het moment dat ik dit namelijk wil doen verdwijnen alle dropdownlisten aangemaakt door de placeholder van mijn scherm maar ik heb niet de gegeven die geselecteerd zijn kunnen achterhalen.

Ik heb op internet gevonden hou ik dit zou moeten via findcontrol maar dit lukt dus niet.

Ik gebruik de volgende stukken code

Vullen placeholder

code:
1
2
3
4
5
6
7
8
dim droptest as New DropDownList()
droptest.Id="DropDownList" & i
droptest.AutopostBack=false
droptest.DataSource= Temparray
droptest.DataBind
                                 
 PH1.controls.add(droptest)
 PH1.controls.add(new LiteralControl("</td><tr><td nowrap>"))



De placeholder

code:
1
<td nowrap><asp:PlaceHolder ID="PH1" runat="server"></asp:PlaceHolder></td>



Het uitlezen

code:
1
2
3
4
5
6
7
8
9
For intCount = 0 to aantalPos
Dim obj As Object = PH1.FindControl("DropDownList" & intCount)

If Not obj Is Nothing then
Dim ddl As DropDownlist= Ctype(obj, DropDownList)
Dim testie As String =ddl.SelectedValue
Label.text= testie
End If
Next


Ik krijg het gevoel dat ik in mijn for loop als ik zoek op mijn Placeholder een nullpointer krijg dit zou dus zeggen dat ie hem niet kan vinden

Verwijderd

Code ziet er wel goed uit... Probeer er eens achter te komen welke controls in die ph staan, en hoeveel met bijv. ph1.Controls.Count.

Waarom zet je de autopostback op false? Had dat nog een reden?

/Edit: aantalpos is ook goed ingesteld?? Je krijgt dus allemaal null-values begrijp ik, d.w.z. hij komt nooit op regel 5?

/Edit: je leest wel op het goede moment uit? Niet dat ze dan alweer weg zijn? Anders gaat het natuurlijk nooit goed 8)7

[ Voor 42% gewijzigd door Verwijderd op 02-11-2005 14:51 ]


Verwijderd

Topicstarter
Verwijderd schreef op woensdag 02 november 2005 @ 14:47:
Code ziet er wel goed uit... Probeer er eens achter te komen welke controls in die ph staan, en hoeveel met bijv. ph1.Controls.Count.

Waarom zet je de autopostback op false? Had dat nog een reden?

/Edit: aantalpos is ook goed ingesteld?? Je krijgt dus allemaal null-values begrijp ik, d.w.z. hij komt nooit op regel 5?

/Edit: je leest wel op het goede moment uit? Niet dat ze dan alweer weg zijn? Anders gaat het natuurlijk nooit goed 8)7
De dropdownlisten worden gemaakt in de Page_load if not postback op het moment dat ik op de knop BTsave druk wordt de onclick procedure setPreorder aangeroepen en deze begint de databankt te vullen met orderregels.

Nu zie ik wel dat de dus de dropdownlist idd verdwijnt dus zou het kunnen dat deze weg zijn, kan dit te maken hebben met het feit dat autopostback op false staat. Ik had die eigenlijk op false gezet omdat ik verder er echt niets mee hoeft te doen dan de user een waarde te laten opzoeken en later in de databank te plaatsen.

aantalpos is goed maar heb hem voor de zekerheid even op 10 gezet

Verwijderd

Topicstarter
Placeholder is dus leeg :'(

Hoe zou dit kunnen komen

Verwijderd

Autopostback kan het niet zijn... Check eens welke code er eerst wordt uitgevoerd na het klikken op de submitknop, d.w.z. wordt dan de placeholder niet opnieuw gevuld. Dat is het enige dat ik kan bedenken.

M.b.v. breakpoints en zo.

[ Voor 109% gewijzigd door Verwijderd op 02-11-2005 15:14 ]


Verwijderd

Topicstarter
Verwijderd schreef op woensdag 02 november 2005 @ 15:11:
Zet autopostback eens op true... Of laat dit uberhaupt weg.
dat geeft hetzelfde resultaat de dropdownlisten verwijden en de count staat op 0 tot ik weer mijn selectie maak in de bovenste 2 boxen

Effe duidelijker schrijven ;-)

Ik heb dus 2 boxen die bij een onchangeselecetd de methode CreateMainPage aan roept en de placholder laad het aantal DDL (dropdownliste) afhankelijk van deze selecetie ook zet ik nu een butten BTsave visible op true en de gebruiker kan zijn selectie maken. Als hij hierna op BTsave clickt word dus de methode setPreOrder aangeroepen en hier is de placeholder dan dus leeg

Hier ook effe de code maar hij beetje lang dus ik kan begrijpen als niemand hem wilt lezen ;)

code:
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
<%@ Page Language="vb" Debug="true" %>
<%@ import Namespace="System.Web.Security" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

    Dim ArrayModels
    Dim ArrayType
    Dim ArrayPosition
    
    Dim dbconn, sql, dbcomm, dbread
    
       sub Page_Load(Source as Object, E as EventArgs)
       
       
         if (IsPostBack)
    
    
    
            else
    
            ArrayModels = new Arraylist()
            ArrayType = new Arraylist()
  
  
                   dbconn=New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0; data source=" &server.MapPath("db.mdb"))
                   dbconn.Open()
    
                          sql = "SELECT DISTINCT * From TBL_Models"
                          dbcomm= New OleDbCommand(sql,dbconn)
                          dbread=dbcomm.ExecuteReader()
    
                              do while dbread.Read()
                                ArrayModels.add(dbread("Model").ToString)
                              Loop
    
                          DropDownListModels.DataSource= ArrayModels
                          DropDownListModels.DataBind
    
                   dbread.Close()
    
                          sql = "SELECT DISTINCT * From TBL_Type"
                          dbcomm= New OleDbCommand(sql,dbconn)
                          dbread=dbcomm.ExecuteReader()
    
                              do while dbread.Read()
                                ArrayType.add(dbread("Type").ToString)
                              Loop
                          DropDownListType.DataSource= ArrayType
                          DropDownListType.DataBind
    
                   dbread.Close()
                   dbconn.Close()

           End if
       End sub
    
    
       Sub CreateMainPage(sender As Object, e As EventArgs)
    
           ArrayPosition= new ArrayList()
        
    
             dbconn=New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0; data source=" &server.MapPath("db.mdb"))
             dbconn.Open()
    
                          sql = "SELECT Distinct TBL_Artikels.Posistion FROM TBL_Artikels INNER JOIN TBL_Koppeling ON TBL_Artikels.Mnumber = TBL_Koppeling.Mnummer WHERE TBL_Koppeling.Model='" & DropDownListModels.SelectedItem.Text & "' and TBL_Artikels.Type='" & DropDownListType.SelectedItem.Text & "';"
    
                          dbcomm= New OleDbCommand(sql,dbconn)
                          dbread=dbcomm.ExecuteReader()
    
    
            '' 2de verbinding om dropdownlisten te vullen
            Dim dbconn2, sql2, dbcomm2, dbread2
            dbconn2=New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0; data source=" &server.MapPath("db.mdb"))
            
            
            Dim i, Links, Boven
            Dim Temparray
            Links = 300
            Boven = 100
            i=0
                          do while dbread.Read()
                               ArrayPosition.add(dbread("Posistion").ToString)
                               
                               dbconn2.open()
                                   Temparray= new ArrayList()
                                   Temparray.Add("Not Needed")
                                   sql2="SELECT Distinct TBL_Artikels.Mnumber,TBL_Artikels.Artikelnummer,TBL_Artikels.Omschrijving FROM TBL_Artikels INNER JOIN TBL_Koppeling ON TBL_Artikels.Mnumber = TBL_Koppeling.Mnummer WHERE TBL_Koppeling.Model='" & DropDownListModels.SelectedItem.Text & "' and TBL_Artikels.Type='" & DropDownListType.SelectedItem.Text & "' and Posistion='"& dbread("Posistion").ToString &"';"
                                   dbcomm2= New OleDbCommand(sql2,dbconn2)
                                   dbread2=dbcomm2.ExecuteReader()
                                   
                                       do while dbread2.Read()
                                        Temparray.add(dbread2("Mnumber").ToString & " | " & dbread2("Artikelnummer").ToString & " | " & dbread2("Omschrijving").ToString)
                                       Loop
                               
                                dim labelTemp as New Label()
                                labelTemp.Id="LabelPos"& i
                                labelTemp.Text=dbread("Posistion").ToString
                                
                                PH1.controls.add(labelTemp)
                                PH1.controls.add(new LiteralControl("&nbsp;&nbsp;</td><td>"))
                    
                                 dim droptest as New DropDownList()
                                 droptest.Id="DropDownList" & i

                                
                                 droptest.DataSource= Temparray
                                 droptest.DataBind
                                 
                                 PH1.controls.add(droptest)
                                 PH1.controls.add(new LiteralControl("</td><tr><td nowrap>"))
                                 i=i+1
                                 Boven= Boven + 30
                                 dbread2.Close()
                                 dbconn2.Close()

                          Loop
                        
                            BTOrder.Visible=true
                            BTCancel.Visible=true

                           DropDownList.DataSource= ArrayPosition
                           DropDownList.DataBind
    
                    dbread.Close()
                    dbconn.Close()

       End Sub
       
       Sub setPreOrder(sender As Object, e As EventArgs)
       
       Dim newOrderNr
       Dim newOrderRegelNr
       Dim aantalPos = 0 
       
            dbconn=New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0; data source=" &server.MapPath("db.mdb"))
            dbconn.Open()
            
            sql = "SELECT Distinct TBL_Artikels.Posistion FROM TBL_Artikels INNER JOIN TBL_Koppeling ON TBL_Artikels.Mnumber = TBL_Koppeling.Mnummer WHERE TBL_Koppeling.Model='" & DropDownListModels.SelectedItem.Text & "' and TBL_Artikels.Type='" & DropDownListType.SelectedItem.Text & "';"

    
             dbcomm= New OleDbCommand(sql,dbconn)
             dbread=dbcomm.ExecuteReader()
       
                do while dbread.Read()
                aantalPos = aantalPos + 1
                
                loop
            
            dbread.Close()
            dbconn.Close()
       
        dbconn=New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0; data source=" &server.MapPath("Orders.mdb"))
        dbconn.Open()
    

    
            sql = "SELECT Max (Ordernr) As MaxOrdernr FROM TBLOrders;"
    
             dbcomm= New OleDbCommand(sql,dbconn)
             dbread=dbcomm.ExecuteReader()
       
                do while dbread.Read()
                newOrderNr = dbread("MaxOrdernr") + 1
                
                loop
            
            dbread.Close()
            
            sql = "SELECT Max (Orderregelnr) As MaxOrdernrRegel FROM TBLOrderregels;"
    
             dbcomm= New OleDbCommand(sql,dbconn)
             dbread=dbcomm.ExecuteReader()
       
                do while dbread.Read()
                newOrderRegelNr = dbread("MaxOrdernrRegel") + 1
    
                loop
            
            dbread.Close()

            
            'Try
            
            
            sql="INSERT INTO TBLOrders ( Ordernr,Datum,Aantal,Bevestigd,Verwerkt) VALUES ("
            sql=sql & newOrderNr & ", "
            sql=sql & " #01-10-2005# "& ", "
            sql=sql & " 1 "& ", "
            sql=sql & " False "& ", "
            sql=sql & " False "& "  ) "
            
            dbcomm= New OleDbCommand(sql,dbconn)
            dbread=dbcomm.ExecuteNonQuery()
        

            
            sql="INSERT INTO TBLKlantenOrders( KlantId, OrderNr) VALUES ("
            sql=sql & User.Identity.Name & ", "
            sql=sql & newOrderNr & " ); "
            
            dbcomm= New OleDbCommand(sql,dbconn)
            dbread=dbcomm.ExecuteNonQuery()
            
            dim intcount 
            label.text=PH1.Controls.count
            

            'For intCount = 0 to 10
                'Dim obj As Object = PH1.FindControl("DropDownList" & intCount)
                    'if Not obj Is Nothing then
                        'Dim ddl As DropDownlist= Ctype(obj, DropDownList)
                        'Dim testie As String =ddl.SelectedValue
                        'Label.text= testie
                    'End If
            'Next
            
            'sql="INSERT INTO TBLOrderregels( Orderregelnr, Mnumber, Artikelnummer, Omschrijving, Type, Posistion. Model) VALUES ("
            'sql=sql & User.Identity.Name & ", "
            'sql=sql & newOrderNr & " ); "
            
            'dbcomm= New OleDbCommand(sql,dbconn)
            'dbread=dbcomm.ExecuteNonQuery()
            

            
            dbconn.Close()
     
            'catch
       
       
       
            'finally
     
            dbconn.close()
     
            'end try
    
       
       end sub
   

</script>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Untitled Document</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
<!--
body {
    background-color: #FFFFCC;
}
-->
</style></head>
<body>
    <form runat="server">
        <asp:DropDownList Visible="false" id="DropDownList" runat="server" Width="150px" style="Z-INDEX: 100; LEFT: 351px; POSITION: absolute; TOP: 184px" name="DropDownList"></asp:DropDownList>
          <table width="609" border="0" align="center">
            <tr>
              <td width="295" align="left"><div align="left">
                <asp:Label ID="Label" runat="server" />                
              </div></td>
              <td width="304"></td>
            </tr>
            <tr>
              <td align="left"><div align="left">
                <asp:Label id="LabelModels" runat="server" text="Select Your Model" width="150px"></asp:Label>
              </div></td>
              <td><asp:DropDownList id="DropDownListModels"  runat="server" Width="150px" AutoPostBack="true" OnSelectedIndexChanged="CreateMainPage"></asp:DropDownList></td>
            </tr>
            <tr>
              <td align="left"><div align="left">
                <asp:Label id="LabelType"  runat="server" text="Select Your Type" width="150px"></asp:Label>
              </div></td>
              <td><asp:DropDownList id="DropDownListType"  runat="server" Width="150px" AutoPostBack="true" OnSelectedIndexChanged="CreateMainPage"></asp:DropDownList></td>
            </tr>
            <tr>
            </table>
            <hr>
             <table width="419" border="0" align="center">
               <tr>
                 <td nowrap><asp:PlaceHolder ID="PH1" runat="server"></asp:PlaceHolder></td>
                 <td>&nbsp;</td>
               </tr>
               <tr>
                 <td nowrap><asp:Button ID="BTCancel" runat="server" Text="Cancel" Width="75" Visible="false"/></td>
              
                 <td nowrap><asp:Button ID="BTOrder" Text="Pre-order" Width="75" runat="server" Visible="false" OnClick="setPreOrder" postba /></td>
                 <td>&nbsp;</td>
               </tr>
             </table>
             <div align="center"></div>
    </form>
</body>
</html>

[ Voor 94% gewijzigd door Verwijderd op 02-11-2005 15:24 ]


Verwijderd

1) Haal die lap code maar weer weg, het is hier geen debugforum (waar het al een beetje op gaat lijken :X)

2) Lees mijn ge-editte post even :)

Verwijderd

Topicstarter
Ja nee dat begrijp ik dat niet de bedoeling is dat iemand voor mij die code gaat uitspitten.

maar ga in mijn boekje ADO.net effe hoofstuk over debuggen lezen!

Maar snap het probleem echt niet want roep nergens die methode's aan de enige die steeds opnieuwe geladen wordt is de postback van de 2 voor selectie lijsten, en dan staat er alleen een laad en een save procedure in. Waarbij de laat procedure de placeholder aanmaakt maar deze wordt echt niet aangeroepen in de save procedure dus moet eigenlijk wel in de postback zitten

Verwijderd

Verwijderd schreef op woensdag 02 november 2005 @ 15:58:
Maar snap het probleem echt niet want roep nergens die methode's aan de enige die steeds opnieuwe geladen wordt is de postback van de 2 voor selectie lijsten, en dan staat er alleen een laad en een save procedure in. Waarbij de laat procedure de placeholder aanmaakt maar deze wordt echt niet aangeroepen in de save procedure dus moet eigenlijk wel in de postback zitten
Als je de placeholder aanmaakt VOORDAT je hem uitleest is het niet zo raar dat het fout gaat :X.

Je gebruikt dus ADO, dat ken ik verder niet, maar het zal vast wel breakpoints en zo ondersteunen. Zet dus breakpoints op het creeren van de placeholder en het uitlezen ervan.

Verwijderd

Topicstarter
Verwijderd schreef op woensdag 02 november 2005 @ 16:04:
[...]

Als je de placeholder aanmaakt VOORDAT je hem uitleest is het niet zo raar dat het fout gaat :X.

Je gebruikt dus ADO, dat ken ik verder niet, maar het zal vast wel breakpoints en zo ondersteunen. Zet dus breakpoints op het creeren van de placeholder en het uitlezen ervan.
Oh waarom is het normaal dat het dan mis gaat!. Hoe kan ik dan de waardes uit de DDL halen. Want is de bedoeling dat de gebruiker eerst de modules selecteerd dit doet die via de DDL van de placeholder, en daarna wil ik als ze op de button drukken graag weten wat ze geselecteerd hebben.

Daarom dat ik dus dan pas de placeholder wil uitlezen

Ik dacht nammelijk dat de placeholder alleen maar ruimte vrijhoudt om zo dynamisch mijn buttons te kunnen maken. Nu heb ik die gemaakt en wil die dus graag uitlezen en weet dat ze oplopend genummerd zijn dus dropdowslist1 dropwdownlist2 ook weer ik hoeveel er zijn.

[ Voor 16% gewijzigd door Verwijderd op 02-11-2005 16:47 ]


Verwijderd

Tja, ik weet niet hoe je code precies in mekaar zit (ik ga die 300 loc echt niet doorlezen nee) en wat je precies wanneer aanroept, daarom zou je dat even door te DEBUGGEN uit moeten zoeken... Normaliter zou het idd gewoon goed moeten gaan, d.w.z. dat hij eerst de eventhandler afvangt die bij je submitknop hoort en vervolgens de nieuwe pagina construeert.

[ Voor 42% gewijzigd door Verwijderd op 02-11-2005 16:48 ]


Verwijderd

Topicstarter
[quote]Verwijderd schreef op woensdag 02 november 2005 @ 16:47:
Tja, ik weet niet hoe je code precies in mekaar zit (ik ga die 300 loc echt niet doorlezen nee) en wat je precies wanneer aanroept, daarom zou je dat even door te DEBUGGEN uit moeten zoeken... Normaliter zou het idd gewoon goed moeten gaan, d.w.z. dat hij eerst de eventhandler afvangt die bij je submitknop hoort en vervolgens de nieuwe pagina construeert.[/quot]

Ja ga wel uitzoeken hoe het debuggen werkt want krijg ik direct meer inzicht hoe de methodes aangeroepen worden zal wel ergens een stommen fout zitten

en de code leest al helemaal niet makkelijk dus die zou ik zelf ook iet doorspitten als ik hem tegenkwam

;)

[ Voor 23% gewijzigd door Verwijderd op 02-11-2005 16:57 ]


Verwijderd

Nee dat wou ik nog wel even kwijt, ik weet niet hoe je de tab-indents hebt staan, maar het staat een beetje schots en scheef onder elkaar :).

  • cannibal
  • Registratie: Maart 2001
  • Laatst online: 16-04 20:03
Ik zou ook de controls (dropdowns) aanmaken in de Oninit.
en uitlezen in de onload.

Tussen deze 2 events worden de postback-values terug gezet in de controls, dus als je daarna je controls aanmaakt is je data iiig pleitte. (en bij postback ook niet opnieuw de comboboxen vullen, wel creeeren.)

Verwijderd

Topicstarter
Ik heb nu het volgende geprobeerd als het niet lukt via de placeholder dan via een request.form tip van een jongen op school.

Ik gebruik nu de code
code:
1
2
3
4
5
6
7
8
9
10
dim i = 0
dim obj as Object
  for each obj in request.form
    if obj.toString().equals("DropDownList"& i) then
    Dim ddl As DropDownList= Ctype(obj,DropDownList)
    label.text=label.text & " " & obj.toString()
    i=i+1
  else
  end if 
next


Maar dit lukt me ook niet omdat ie zegt daat het een castexception opleverd dus hij kan het niet omzetten. Ik weet wel zeker dat het if statement de juiste dropdownlisten doorlaat. Want als ik alleen tostring doe krijg ik hier een lijst van.

Is het mogelijk een obj terug te gasten na een dropdownlist, of moet ik proberen uit de request.form de geselecteerde waarde uit te lezen?

Verwijderd

In Request.Form is het geen dropdownlist meer, maar een waarde van de <select> die gegenereerd is... Kan ook wel, maar is minder netjes vind ik. Zoek even op Request.Form op google.
k weet wel zeker dat het if statement de juiste dropdownlisten doorlaat.
En ik weet wel zeker van niet.

Je weet volgens mij nu niet meer wat je aan het doen bent; dit had je echt wel zelf kunnen uitzoeken.

Zie hier: http://www.elated.com/tutorials/programming/asp/forms/

Lees de tip van cannibal even, er zit gewoon een fout in de volgorde in je code. Met debuggen kom je hier makkelijk achter. Zelf gebruik ik VS.NET, met breakpoints kun je dan precies zien welke code eerst wordt aangeroepen etc.

[ Voor 11% gewijzigd door Verwijderd op 03-11-2005 16:40 ]


Verwijderd

Topicstarter
Ik heb dus vanalles opgezocht en op internet geprobeerd.

het aanmaken van de buttons in de oninit kan niet (tenmiste volgens mij niet) omdat deze tijdens het werken met de pagina veranderen.

Ook het uitlezen in de unload_page ging niet goed.

Het werkt wel in de PreRender methode dan levert een count op het aantal items een correcte waarde op.

Nu heb ik het volgende geprobeerd
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    protected override void OnPreRender(System.EventArgs e)
    {
    int a = 0;
     for (int i =0; i<PH1.Controls.Count; i++)
     {
        if (PH1.Controls[i].GetType().ToString().Equals("System.Web.UI.WebControls.DropDownList")) 
    
        {
             DropDownList tempDDL =(DropDownList) PH1.Controls[i];
                                     testie=tempDDL.SelectedItem.Text;
        }
        else
        {
        
        }
     }
 

    
   ViewState["test"]= PH1.Controls.Count + testie;
     
}


Echter hij is dus door deze actie zijn geselecteerde index kwijt! en neemt altijd de eerste waarde.

De dropdownlisten zijn oplopend genummerd van DropDownlisto tot DropDownListXX.

Een test met DropDownList0.SelectedItem.Text levert een error op bij laden van de pagina omdat deze dan nog niet bestaat

Iemand een idee hoe je de geselecteerde waarde wel kunt uitlezen

[ Voor 6% gewijzigd door Verwijderd op 09-11-2005 23:37 ]


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Als je tijdens het aanmaken van de dropdownlist deze nu even in een array stopt. Kun je daarna deze objecten gewoon benaderen.

Anders kun je nog altijd het Object met FindControl opzoeken (Page.FindControl()) en je acties erop uit voeren wel even casten van te voren!. In C# kun je met de operator "is" controleren of een Object van een bepaalde type is (wat je in Java met instanceof doet) ik denk dat vb.net ook zo'n constructie heeft.

dan hoef je ook niet meer te vertrouwen op de toString methode om daar op te checken.

Algemen Regel: wil je met dynamische aangemaakte controls werken in ASP.NET, gooi ze ff in een array. (en vergeet vooral het Id niet te setten)
Pagina: 1