установить выбранное значение на основе родительского значения

У меня есть 2 каскадных раскрывающихся списка, 1 - родительский, а другой / дочерний заполняется, когда вы выбираете значение в первом / родительском раскрывающемся списке.

Первый заполняется при загрузке страницы, и я могу установить для него выбранное значение на основе значения базы данных, которое было сохранено на предыдущей странице.

Для второго каскадного раскрывающегося списка он заполняется для меня, когда я устанавливаю выбранное значение для родительского идентификатора при загрузке страницы (на основе значения базы данных).

Но поскольку второй / дочерний раскрывающийся список не устанавливается / не загружается со значениями до загрузки страницы, я не могу установить выбранное значение (я пробовал на Page_Load_Complete, но и там он не работает).

Мне нужно знать, как после того, как я установил выбранное значение в родительском раскрывающемся списке (это нормально работает), чтобы заполнить второе раскрывающееся меню на основе значения в первом.

Вот мой код для страницы aspx. Я могу установить первое выбранное значение, и оно заполняет второе поле выбора (но я не могу установить выбранное значение, потому что оно не заполняется в то время, когда я устанавливаю первое выбранное значение.

страница aspx

<asp:Label ID="lblAffPartCat" Text="<%$ Resources:share,lblAffPartCat %>" runat="server"></asp:Label>
<asp:DropDownList ID="ddlPartCat" runat="server"></asp:DropDownList>

<ajaxToolkit:CascadingDropDown ID="CascadingDropDown2" runat="server" TargetControlID="ddlPartCat"
Category="BasePart"  PromptText="<%$ Resources:share,lblSelPartCat %>"  LoadingText="[Loading Part Cat...]"
ServicePath="PAIntExtPart.asmx" ServiceMethod="BindPartCat" 
ContextKey="" UseContextKey="True"/> 

<asp:Label ID="lblAffBasePart" Text="<%$ Resources:share,lblAffBasePart %>" runat="server"></asp:Label>

<asp:DropDownList ID="ddlBasePart" runat="server" ></asp:DropDownList>

<ajaxToolkit:CascadingDropDown ID="ddlBasePart_CascadingDropDown"  runat="server" Category="BasePart"
TargetControlID="ddlBasePart"  ParentControlID= "ddlPartCat" PromptText="<%$ Resources:share,lblSelBasePart %>" 
LoadingText="Loading Base Parts.."
ServicePath="PAIntExtPart.asmx" 
ServiceMethod="BindBasePart"
ContextKey="" UseContextKey="True" />  

asmx.cs, которая заполняет раскрывающиеся списки:

using System;
using System.Collections.Generic;
using System.Web.Services;
using System.Data;
using System.Collections.Specialized;
using AjaxControlToolkit;
using Hotline.DataAccess;

/// <summary>
    /// Summary description for PAIntExtPart
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService()]
    public class PAIntExtPart : System.Web.Services.WebService
    {
        string _SiteLocation = MiscFunctions.getCurrentSiteLocation();

        /// <summary>
        /// WebMethod to Populate Part Category Dropdown
        /// </summary>
        [WebMethod]
        public CascadingDropDownNameValue[] BindPartCat(string knownCategoryValues, string category, string contextKey)
        {
            DataTable dsPartCat = null;

            // string passed for contextKey is FormType and Language split by ":"
            string[] arrcontextKey = contextKey.Split(':');

            string FormType = arrcontextKey[0].ToString();
            int LanguageID =  Int32.Parse(arrcontextKey[1].ToString());
            string PartCatValue = arrcontextKey[2].ToString();

            try
            {                
                dsPartCat = HarDB.getPartCat(_SiteLocation, LanguageID, FormType);

                //create list and add items in it by looping through dataset table
                List<CascadingDropDownNameValue> PartCatdetails = new List<CascadingDropDownNameValue>();
                foreach (DataRow dtrow in dsPartCat.Rows)
                {
                    string PartCatID = dtrow["PartCatID"].ToString();
                    string PartCat = dtrow["PartCat"].ToString();
                    PartCatdetails.Add(new CascadingDropDownNameValue(PartCat, PartCatID));

                }

                if (PartCatValue.Trim() != "")
                {                    
                    //SelectedValue = PartCatValue;
                }

                return PartCatdetails.ToArray();

            }
            catch (Exception ex)
            {
                Server.Transfer("Errorpage.aspx?function=getAttachInfo+Error=" + Server.UrlEncode(ex.Message));
                return null;
            }

        }

        /// <summary>
        /// WebMethod to Populate Base Part Dropdown
        /// </summary>
        [WebMethod]
        public CascadingDropDownNameValue[] BindBasePart(string knownCategoryValues, string category, string contextKey)
        {
            string PartCatID;
            //int LanguageID = Int32.Parse(contextKey); 

            string[] arrcontextKey = contextKey.Split(':');

            string FormType = arrcontextKey[0].ToString();
            int LanguageID = Int32.Parse(arrcontextKey[1].ToString());
            string BasePartValue = arrcontextKey[2].ToString();

            //This method will return a StringDictionary containing the name/value pairs of the currently selected values
            StringDictionary PartCatdetails = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);

            PartCatID = PartCatdetails["BasePart"];


            DataTable dsBasePart = null;
            try
            {
                dsBasePart = HarDB.getBasePart(_SiteLocation, LanguageID, PartCatID, FormType);

                //create list and add items in it by looping through dataset table
                List<CascadingDropDownNameValue> BasePartdetails = new List<CascadingDropDownNameValue>();
                foreach (DataRow dtrow in dsBasePart.Rows)
                {
                    string BasePartID = dtrow["BasePartNumID"].ToString();
                    string BasePart = dtrow["BasePartNum"].ToString();
                    BasePartdetails.Add(new CascadingDropDownNameValue(BasePart, BasePartID));
                }

                if (BasePartValue.Trim() != "")
                {
                    //SelectedValue = PartCatValue;
                }

                return BasePartdetails.ToArray();

            }
            catch (Exception ex)
            {
                Server.Transfer("Errorpage.aspx?function=getAttachInfo+Error=" + Server.UrlEncode(ex.Message));
                return null;
            }

        }

    }

person Brad    schedule 12.03.2013    source источник
comment
Я отредактировал ваше название. См. Должны ли вопросы включать «теги» в свои заголовки?, где нет единого мнения, не следует.   -  person John Saunders    schedule 13.03.2013


Ответы (1)


Я обнаружил свою проблему, я не использовал правильное «Выбранное значение» при попытке заполнить второе раскрывающееся меню.

person Brad    schedule 13.03.2013