0

私は 2 つのカスケード ドロップ ダウンを持っています。1 つは親で、最初/親のドロップ ダウンで値を選択すると、もう一方/子が入力されます。

最初の値はページの読み込み時に入力され、前のページで保存されたデータベース値に基づいて、この値に選択された値を設定できます。

2 番目のカスケード ドロップダウンでは、ページの読み込み時に (データベースの値に基づいて) 親 ID に選択した値を設定すると、値が入力されます。

しかし、2番目/子のドロップダウンは、ページがロードされるまで値が設定/ロードされないため、選択した値を設定できません(Page_Load_Completeを試しましたが、そこでも機能しません)。

親ドロップダウンで選択した値を設定したら(これは正常に機能します)、最初のドロップダウンの値に基づいて2番目のドロップダウンを設定する方法を知る必要があります。

aspx ページのコードは次のとおりです。最初に選択した値を設定でき、それが 2 番目の選択ボックスに入力されます (ただし、最初に選択した値を設定した時点では入力されていないため、選択した値を設定できません。

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;
            }

        }

    }
4

1 に答える 1

0

私は自分の問題を発見しました.2番目のドロップダウンを入力しようとしたときに、正しい「選択された値」を使用していませんでした.

于 2013-03-13T18:20:54.490 に答える