[ASP.NET] DropDownList refreshed zichzelf niet na Page_Load

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ThaStealth
  • Registratie: Oktober 2004
  • Laatst online: 11-09 10:19
Hoi,

Ik heb een dropdownlist waarbij ik items wil toevoegen nadat de pagina is gestart (er is bijv op een item geklikt, en ik moet dan vervolgens extra items toevoegen, of juist wissen).

Het probleem is echter dat dit alleen de eerste keer (dus in de Page_Load) werkt, daarna kan ik wel de control editen (dit zie ik ook in de debugger, er zitten dan bijv meer/minder items in), maar in de browser word dit niet gerefreshed. Het lijkt erop alsof ik iets heel elementairs vergeet, maar ik kom er niet op

Dit is de code die ik uitvoer elke keer dat ik op een knop geklikt heb waarbij de DropDown geupdate dient te worden:
C#:
1
2
3
4
                this.DropDownList1.DataSource = GetUsersWhoExecutedCommandsOnDevice(vNV.DBID);
                this.DropDownList1.DataTextField = "accountName";
                this.DropDownList1.DataValueField = "userID";
                this.DropDownList1.DataBind();


Na de databind heeft de DropDown meer/minder items, helaas word dit niet getoond in de browser, de oude items die in de Page_Load zijn ingeladen blijven staan....

Mess with the best, die like the rest


Acties:
  • 0 Henk 'm!

Verwijderd

heb je van de DropDownList wel AutoPostBack aangezet?
dus:
DropDownList1.AutoPostBack = true;

deze staat standaard uit op een dropdownlist als ik me het goed herinner.

edit: volgens mij heb ik het verkeerd gelezen, excuus. Ik dacht dat het op een selectionchanged event van de dropdownlist moest gebeuren.

[ Voor 29% gewijzigd door Verwijderd op 08-10-2009 21:23 ]


Acties:
  • 0 Henk 'm!

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
ThaStealth schreef op donderdag 08 oktober 2009 @ 15:14:
Na de databind heeft de DropDown meer/minder items...
-Denk- je dat of -weet- je dat? Heb je dat gecheckt d.m.v. een breakpoint? Mogelijk wordt de mutatie niet goed uitgevoerd?

Acties:
  • 0 Henk 'm!

  • bastv
  • Registratie: September 2005
  • Laatst online: 08-09 20:34
doe maar een gok.
viewstate uitzetten op de dropdown?

[ Voor 36% gewijzigd door bastv op 08-10-2009 22:45 ]


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 09:44

gorgi_19

Kruimeltjes zijn weer op :9

Nog een gok, in je page_load controleer je niet op Page.IsPostback en daardoor overschrijft hij de waarden van je invoervelden.

Gooi een je gehele Page_Load, de inhoud van je click-method en de relevante .aspx code (<asp:dropdowlist ...... etc.), dat maakt het wat makkelijker :)

[ Voor 39% gewijzigd door gorgi_19 op 09-10-2009 08:13 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • ThaStealth
  • Registratie: Oktober 2004
  • Laatst online: 11-09 10:19
Face_-_LeSS schreef op donderdag 08 oktober 2009 @ 21:15:
[...]


-Denk- je dat of -weet- je dat? Heb je dat gecheckt d.m.v. een breakpoint? Mogelijk wordt de mutatie niet goed uitgevoerd?
Dat weet ik, heb ik gechecked met mbv een breakpoint, voor de Databind zit er bijv 1 item in de dropdown, na de Databind zitten er 3 in de dropdown.
bastv schreef op donderdag 08 oktober 2009 @ 22:44:
doe maar een gok.
viewstate uitzetten op de dropdown?
Heeft als gevolg dat de dropdown niet gevuld word, en de items die ik er handmatig inzet (voor testdoeleinden) worden gewist als ik er 1 selecteer
gorgi_19 schreef op vrijdag 09 oktober 2009 @ 08:12:
Nog een gok, in je page_load controleer je niet op Page.IsPostback en daardoor overschrijft hij de waarden van je invoervelden.

Gooi een je gehele Page_Load, de inhoud van je click-method en de relevante .aspx code (<asp:dropdowlist ...... etc.), dat maakt het wat makkelijker :)
Doe ik wel ;)

Hiebij de pageload:

C#:
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
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!base.IsPostBack)
            {                
                if (!this.RTView1.IsEmpty) //RTView 1 is een Treeview waarin een item geselecteerd wordt, bij de onlick hiervan moet de dropdown ook vernieuwd worden
                {
                    RefreshDropDown();
                }
            }            
        }

        protected void RadTreeView1_NodeClick(object o, RadTreeNodeEventArgs e)
        {
            if (e.NodeClicked != null)
            {
                RefreshDropDown();              // zoals hier dus   
            }
            
        }

        private void RefreshDropDown()
        {
            if (this.RTView1.SelectedNode != null)
            {
                this.DropDownList1.DataSource = GetUserList( this.RTView1.SelectedNode.Value);
                this.DropDownList1.DataTextField = "accountName";
                this.DropDownList1.DataBind(); // alle usernames die mogelijk zijn
                System.Web.UI.WebControls.ListItem item = new System.Web.UI.WebControls.ListItem("All users", "-1");
                this.DropDownList1.Items.Insert(0, item); //All users selectie mogelijkheid
            }
        }


ASP.NET Visual Basic:
1
2
3
4
5
<asp:DropDownList 
                         ID="DropDownList1" runat="server" AutoPostBack="True" 
                         ondatabound="DropDownList1_DataBound" 
                         onselectedindexchanged="DropDownList1_SelectedIndexChanged" Width="192px">
                     </asp:DropDownList>

[ Voor 61% gewijzigd door ThaStealth op 09-10-2009 09:01 . Reden: Code toegevoegd op aanvraag ]

Mess with the best, die like the rest


Acties:
  • 0 Henk 'm!

  • Canaria
  • Registratie: Oktober 2001
  • Niet online

Canaria

4313-3581-4704

Ik zou even debuggen op de waarde van de RTView1.SelectedNode direct na de page load. Anders misschien RefreshDropDown() die waarde als parameter meegeven.

Ik denk namelijk dat je RTView1 nog niet databound is of z'n viewstate waarden heeft op het moment dat je hem benadert.

[ Voor 29% gewijzigd door Canaria op 09-10-2009 10:39 ]

Apparticle SharePoint | Apps | Articles


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Canaria schreef op vrijdag 09 oktober 2009 @ 10:34:
Ik zou even debuggen op de waarde van de RTView1.SelectedNode direct na de page load. Anders misschien RefreshDropDown() die waarde als parameter meegeven.

Ik denk namelijk dat je RTView1 nog niet databound is of z'n viewstate waarden heeft op het moment dat je hem benadert.
Ik denk eerder dat SelectedNode zijn waarde is kwijt geraakt.

De onchange/onclick/etc. RadControls van Telerik wijken nl. nogal af van de wijze waarop de standaard asp.net controls werken.

Uit persoonlijke ervaring weet ik bijvoorbeeld dat een onchange event van radCombobox vuurt voordat de change heeft plaatsgevonden en de nieuwe selectie ergens als event parameter mee gegeven wordt. Dat zou logisch zijn als een soort 'beforeChange' event, ware het niet dat de oude 'huidig geselecteerde' optie in de combobox al op null gezet wordt voordat het event vuurt (wat er dus eigenlijk op duidt dat de programmeurs gewoon hebben liggen slapen).

Dat zou precies kunnen zijn wat die treeview component hier ook doet.


offtopic:
Heerlijk trouwens om Telerik's idee van de page en event lifecycle te gaan combineren met standaard asp.net componenten. Laatste keer dat ik dat moest doen leverde me dat een dag extra werk aan gegoochel met extra private member variables v/d Page subklasse op om dan maar mijn eigen state-tracking van geselecteerde nodes usw. te doen. En ik weet dat ik niet de enige ben die daar al eens mee heeft moeten vechten: Grijze Vos weet ook waar ik het over heb. Klerebende.
Pagina: 1