I'll keep this as simple as possible, apologies in advance. Cascading dropdowns (CCD) are added to a page programatically. Each cascade dropdown (CCD) is added in a while lop based on the number of levels read in from a db table. beside each dropdown (CCD) is an add button, which when clicked pops up a modal window, allowing the user to via an update panel add to each the cascading dropdown (CCD) of choice. My problem is this I want the button beside the dropdown only to become enabled when the cascading dropdown is active/populated. So when I draw everything in theOnInit function I make the buttons beside the cascading dropdowns disabled. My Question is how do I enable them based on the (CCD) becoming active? and secondly am I doing this the correct way. Code below: Thanks in advance
While counter < SR.Item("Annello")
Lit =New Literal
If counter < 1Then
Lit.Text ="Category"
Else
Lit.Text ="Sub-Category"
EndIf
UPanel.ContentTemplateContainer.Controls.Add(Lit)
DDL =New DropDownListWith DDL
.ID ="DropDown" & counter.Width = 250
.DataTextField ="CategoryName"
.DataValueField ="CID"
EndWithUPanel.ContentTemplateContainer.Controls.Add(DDL)
Cascade =New AjaxControlToolkit.CascadingDropDownWith Cascade
.ID ="Cas" & counter.TargetControlID = DDL.ID
If counter > 0Then
.ParentControlID ="DropDown" & counter - 1.PromptText ="Please select a Sub-Category"
Else
.PromptText ="Please select a Category"
EndIf
.LoadingText ="Loading.."
.Category = counter
.ServiceMethod ="GetCategoriesPageMethod"
EndWith
UPanel.ContentTemplateContainer.Controls.Add(Cascade)
IB =New ButtonWith IB.ID ="ADD" & counter
.Text ="add to.."
EndWith
UPanel.ContentTemplateContainer.Controls.Add(IB)
IB.Enabled =False
'''MODAL POPUP
NPanel =New PanelWith NPanel
.Style.Add(HtmlTextWriterStyle.Display,"none").Style.Add(HtmlTextWriterStyle.Height,"200px")
.Style.Add(HtmlTextWriterStyle.Width,"350px").Style.Add(HtmlTextWriterStyle.BackgroundColor,"#ffffff")
.Style.Add(HtmlTextWriterStyle.Padding,"10px").ID ="NPanel" & counter
EndWithLit =New Literal
Lit.Text ="Enter Your Category here "
NPanel.Controls.Add(Lit)
TBX =New TextBoxWith TBX
.ID ="AddTBX" & counter.Width =New System.Web.UI.WebControls.Unit(190)
EndWith
NPanel.Controls.Add(TBX)
IB =New ButtonWith IB.ID ="OK" & counter
.Text ="OK"
'.Attributes.Add("onclick", "InsertCategory();")
EndWith
NPanel.Controls.Add(IB)
IB2 =New ButtonWith IB2
.ID ="Cancel" & counter.Text ="Cancel"
EndWith
NPanel.Controls.Add(IB2)
UPanel.ContentTemplateContainer.Controls.Add(NPanel)
MP =New AjaxControlToolkit.ModalPopupExtenderWith MP
.TargetControlID ="ADD" & counter.PopupControlID ="NPanel" & counter
.OkControlID ="OK" & counter.CancelControlID ="Cancel" & counter
.OnOkScript ="InsertNewCategory()"
.OnCancelScript ="alert('cancel');"
'.OnOkScript = "alert('OK');"
.DropShadow =False
.BackgroundCssClass ="ModalPopupBackground"
EndWith
UPanel.ContentTemplateContainer.Controls.Add(MP)
Hi
Try this,It works:
<td><asp:DropDownList ID="DropDown1" onchange="javascript:activeBtn(this)" runat="server" Width="170" /></td>
<script type='text/javascript'>
function activeBtn(ccd)
{
var strcounter = ccd.id.substring(ccd.id.indexOf("DropDown") + 8, ccd.length - 1);
var counter = parseInt(strcounter);
var theBtn = document.getElementById(ccd.id.replace("DropDown", "ADD").replace(strcounter, (counter + 1) + ""))
if(theBtn){
if(ccd.selectedIndex != 0)theBtn.disable = false;
else theBtn.disable = true;
}
}
</script>
You can add the onchange event handlers for your DropDownLists in code-behind by using this code:
DDL =New DropDownListWith DDL
.ID ="DropDown" & counter.Width = 250
.DataTextField ="CategoryName"
.DataValueField ="CID"
.Attributes.Add("onchange", "javascript:activeBtn(this);")
EndWith
Best Regards
Gave that a go and couldn't get it to work. I see what your doing and I'm hitting the function and even if I hardcode the Button.ID to enable that one button it doesn't work, no errors but it just won't enable it... any ideas. Thanks in advance..
Hi
Sound odd,I have test it many times.I'm sure it works.
Would you please privide us with a whole demo?
Thanks
ThanksJin-Yu Yin
Firstly thanks for you help. It is strange that it doesn't work, the funny thing is if I change you function to the following it works, but I'd never have gotten there without your help. Again many thanks.
function activeBtn(ccd)
{
var strcounter = ccd.id.substring(ccd.id.indexOf("DropDown") + 8, ccd.length - 1);
var counter = parseInt(strcounter);
var theBtn = document.getElementById(ccd.id.replace("DropDown","ADD").replace(strcounter, (counter + 1) +""))if(theBtn){
if(ccd.selectedIndex != 0)
{
if (theBtn.disabled) {theBtn.disabled =false;}else theBtn.disabled =true;}
}
}
Hi
Glad to hear that it works now.I'm sorry for misunderstanding any logic of it.
Best Regards
Like I said mate, thanks ,u were 100% bang on. Appreciate the help.
No comments:
Post a Comment