c# - Why DropDownList.SelectedIndexChanged event does not fire? -
i have dropdown bounded objectdatasource. on data bound event, adding "--select--" value on 0 index. have linkbutton on page , on client click, selecting different item on drop down (using javascript). suppose there 3 items --select--, option1, option2 , option3 , on link button's client click selected option3, if select default value "--select--", not fire selectedindexchanged event. if select other value fires. why not work default value?
protected void page_load(object sender, eventargs e) { if (!ispostback && !iscallback) { this.filldropdown("--select--"); } else { if (this.drp.selecteditem != null) this.filldropdown(this.drp.selecteditem.text); else this.filldropdown("--select--"); } } protected void filldropdown(string viewname) { this.objectdatasource.select(); this.drp.items.clear(); this.drp.selectedindex = -1; this.drp.databind(); if (this.drp.items.count > 0) { listitem item = this.drp.items.findbytext(viewname); if (item == null) { item = this.drp.items.findbytext("--select--"); } if (item != null) { int selectedindex = this.drp.items.indexof(item); this.drp.items[selectedindex].selected = true; this.drp.selectedindex = selectedindex; } } } protected void drp_ondatabound(object sender, eventargs e) { if (this.drp.items.count > 0) { this.drp.items.insert(0, new listitem("--select--", "-1")); } } protected void drp_selectedindexchanged(object sender, eventargs e) { if (drp.selectedvalue != "-1") { session["selecteditem"] = this.drp.selecteditem.text; } } /// button callback not postback <dx:aspxcallback id="aspxcallback1" runat="server" clientinstancename="callback1" oncallback="savefilter_click"> <clientsideevents callbackcomplete="function(s,e){callback1success(s,e);}" /> </dx:aspxcallback> <dx:aspxbutton id="btn_save" runat="server" causesvalidation="false" height="20px" text="save" autopostback="false" usesubmitbehavior="false"> <clientsideevents click="function(s, e) { var isvalid = validate(this, txt1.gettext()); if(isvalid==true) { callback1.performcallback('save'); } else { e.processonserver = false; }}"> </clientsideevents> </dx:aspxbutton> protected void savefilter_click(object sender, callbackeventargs e) { if (e.parameter.tostring() == "save") { if (!string.isnullorempty(txt_savesavesearch.text)) { // saving data data base. this.filldropdown(txt.text); e.result = aspxcallback.getrenderresult(this.drp); } } } function callback1success(s,e) { var ctrl = document.getelementbyid('ctl00_contentholder_drp'); ctrl.outerhtml = e.result; }
update:
based on revised question -
why don't set appenddatabounditems on dropdownlist? property allow dropdownlist append items existing ones.
<asp:dropdownlist id='dropdownlist1' runat='server' autopostback='true' enableviewstate='true' appenddatabounditems='true'> <asp:listitem selected='true' text='--select--' value='1'></asp:listitem></asp:dropdownlist>
the page_load method doesn't want to. else part of executed if 1 of them true ..ex: if "postback true" or "callback true" go else part. suggested in (1) step, set appenddatabounditems , remove code add "--select--".
most issue viewstate, set enableviewstate="true"
<%@ page title="" language="c#" masterpagefile="~/site.master" autoeventwireup="true" codefile="test.aspx.cs" enableviewstate="true"%>
and if using maste pages you'll have enable on too.
<%@ master language="c#" autoeventwireup="true" codefile="site.master.cs" inherits="site" enableviewstate="true" classname="site" %>
and in dropdown web control autopostback="true"
<asp:dropdownlist id='dropdownlist1' runat='server' autopostback='true' onselectedindexchanged='handleondropdownlistselectedindexchanged'> </asp:dropdownlist>
Comments
Post a Comment