locked
Cascading Dropdown Using Ajax and webservices RRS feed

  • Question

  • User1173249824 posted

    Hi Pls I av been working on cascading a dropdownlist with ajax but the issue is I have completely finished with my coding, passing parameters, but the isue is that when ever I run my Webservices, and I invoked my BindFolder and BindSubfolder, it tells me that value cannot be null. but the BindArchive is working properly

    here is my code:

    public class WebService : System.Web.Services.WebService {
         SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["dbConnectStrings"].ConnectionString);
       // Bind Archive
        
        [WebMethod]
        public CascadingDropDownNameValue[] BindArchive(string knownCategoryValues, string category) 
        {
           DataSet ds = new DataSet();
            conn.Open();//select * from [ST-Dep]
            SqlCommand cmd = new SqlCommand("select distinct empd.arc, empc.EmpCategoryId,empc.EmpCategoryName from Doc empd INNER JOIN EmpCategory empc On empd.arc = empc.EmpCategoryId", conn);
            SqlDataAdapter adp = new SqlDataAdapter(cmd);
            cmd.ExecuteNonQuery();
            adp.Fill(ds);
            conn.Close();
    
            List<CascadingDropDownNameValue> ArchiveDetails = new List<CascadingDropDownNameValue> ();
            foreach (DataRow Dr in ds.Tables[0].Rows)
            {
                string ArcID = Dr["arc"].ToString();
                string ArcName = Dr["EmpCategoryName"].ToString();
    
                ArchiveDetails.Add(new CascadingDropDownNameValue(ArcName, ArcID));
    
        }
        return ArchiveDetails.ToArray();
    }
        //Folder
        [WebMethod]
        public CascadingDropDownNameValue[] BindFolder(string knownCategoryValues, string category)
        {
        DataSet ds = new DataSet();
        char ArcID;
        StringDictionary ArchiveDetails = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
        ArcID = Convert.ToChar(ArchiveDetails["arc"]);
        conn.Open();//SELECT  * From [ST-Dep] where DepId=@DepId
        SqlCommand cmd = new SqlCommand("select distinct empd.folder,dep.DepId,dep.DepName From Doc empd INNER JOIN [ST-Dep] dep ON empd.folder = dep.DepId where empd.archive= @DepId ", conn);
        cmd.Parameters.AddWithValue("@DepId", ArcID);
        cmd.ExecuteNonQuery();
            SqlDataAdapter adp = new SqlDataAdapter(cmd);
            adp.Fill(ds);
            conn.Close();
             List<CascadingDropDownNameValue> FolderDetails = new List<CascadingDropDownNameValue> ();
            foreach (DataRow Dr in ds.Tables[0].Rows)
            {
                string FolderID = Dr["folder"].ToString();
                string FolderName = Dr["DepName"].ToString();
                FolderDetails.Add(new CascadingDropDownNameValue(FolderName, FolderID));
            }
            return FolderDetails.ToArray();
            }
        //SubFolder bind
        [WebMethod]
        public CascadingDropDownNameValue[] BinSubfolder(string knownCategoryValues, string category)
        {
            DataSet ds = new DataSet();
            char FolderID;
            StringDictionary folderdetails = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
            FolderID = Convert.ToChar(folderdetails["DepName"]);
            conn.Open();//Select * From Doc where folder = @Folder
            SqlCommand cmd = new SqlCommand("select distinct empd.subfolder, trad.TradeId, trad.TradeName From Doc empd INNER JOIN [Trade] trad ON empd.subfolder = trad.TradeId where (empd.folder = @Folder)", conn);
            cmd.Parameters.AddWithValue("@Folder", FolderID);
            cmd.ExecuteNonQuery();
            SqlDataAdapter adp = new SqlDataAdapter(cmd);
            adp.Fill(ds);
            conn.Close();
            List<CascadingDropDownNameValue> SubFoldetails = new List<CascadingDropDownNameValue>();
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                string SubFolID = dr["subfolder"].ToString();
                string subFolName = dr["TradeName"].ToString(); 
    SubFoldetails.Add(new CascadingDropDownNameValue(subFolName, SubFolID)); } return SubFoldetails.ToArray(); } }

    and Here is my Category in my CASCADINGDROPDOWN
    <asp:CascadingDropDown ID="ccarchive" runat="server" Category="arc" TargetControlID="ddarchive" LoadingText="Loading Archives.." PromptText="Select Archive" ServiceMethod="BindArchive" ServicePath="~/WebService.asmx"   />
    
      <asp:CascadingDropDown ID="ccFolder" runat="server" Category="DepId" TargetControlID="ddFolder" ParentControlID="ddarchive" LoadingText="Loading Folders.." PromptText="Select Folder" ServiceMethod="BindFolder" ServicePath="~/WebService.asmx" />
    
     <asp:CascadingDropDown ID="ccSubfolder" runat="server" Category ="TradeId"  TargetControlID ="ddSubfolder" ParentControlID ="ddFolder" LoadingText="Loading SubFolders" PromptText ="Select SubFolder" ServiceMethod="BindSubfolder" ServicePath="~/WebService.asmx"/>  
           

    Ps can som1 elp me out with what might av been causing it to retun a null value

    Thanks

    Tuesday, April 21, 2015 5:58 AM

Answers

  • User1970566204 posted

    1 .WebService1.asmx

    using System;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;
    using System.Web.Services;
    using AjaxControlToolkit;
    
    namespace WebApplication8
    {
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        [System.Web.Script.Services.ScriptService]
        public class WebService1 : WebService
        {
            private SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);
            [WebMethod]
            public CascadingDropDownNameValue[] BindArchive(string knownCategoryValues, string category)
            {
                DataSet ds = new DataSet();
                conn.Open(); //select * from [ST-Dep]
                SqlCommand cmd = new SqlCommand("SELECT CategoryID as arc ,CategoryName as EmpCategoryName FROM Categories", conn);
                SqlDataAdapter adp = new SqlDataAdapter(cmd);
                cmd.ExecuteNonQuery();
                adp.Fill(ds);
                conn.Close();
                List<CascadingDropDownNameValue> ArchiveDetails = new List<CascadingDropDownNameValue>();
                foreach (DataRow Dr in ds.Tables[0].Rows)
                {
                    string ArcID = Dr["arc"].ToString();
                    string ArcName = Dr["EmpCategoryName"].ToString();
                    ArchiveDetails.Add(new CascadingDropDownNameValue(ArcName, ArcID));
                }
                return ArchiveDetails.ToArray();
            }
            [WebMethod]
            public CascadingDropDownNameValue[] BindFolder(string knownCategoryValues, string category)
            {
                DataSet ds = new DataSet();
                string ArcID; //char ArcID;  //only for my purpose
                StringDictionary ArchiveDetails = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
                // ArcID = Convert.ToChar(ArchiveDetails["arc"]); //only for my purpose
                ArcID = Convert.ToString(ArchiveDetails["arc"]);
                conn.Open(); //SELECT  * From [ST-Dep] where DepId=@DepId
                SqlCommand cmd = new SqlCommand("SELECT SupplierID as folder ,ProductName as DepName FROM Products where CategoryID=@DepId", conn);
                cmd.Parameters.AddWithValue("@DepId", ArcID);
                cmd.ExecuteNonQuery();
                SqlDataAdapter adp = new SqlDataAdapter(cmd);
                adp.Fill(ds);
                conn.Close();
                List<CascadingDropDownNameValue> FolderDetails = new List<CascadingDropDownNameValue>();
                foreach (DataRow Dr in ds.Tables[0].Rows)
                {
                    string FolderID = Dr["folder"].ToString();
                    string FolderName = Dr["DepName"].ToString();
                    FolderDetails.Add(new CascadingDropDownNameValue(FolderName, FolderID));
                }
                return FolderDetails.ToArray();
            }
            //SubFolder bind
            [WebMethod]                  /*BinSubfolder*/
            public CascadingDropDownNameValue[] BindSubfolder(string knownCategoryValues, string category)                                        
            {
                DataSet ds = new DataSet();
                string FolderID;   //char FolderID; //only for my purpose
                StringDictionary folderdetails = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
                //FolderID = Convert.ToChar(folderdetails["DepId"]); //only for my purpose
                FolderID = Convert.ToString(folderdetails["DepId"]);
                conn.Open(); //Select * From Doc where folder = @Folder
                SqlCommand cmd = new SqlCommand("SELECT SupplierID as subfolder,CompanyName as TradeName FROM Suppliers where SupplierID=@Folder ", conn);
                cmd.Parameters.AddWithValue("@Folder", FolderID);
                cmd.ExecuteNonQuery();
                SqlDataAdapter adp = new SqlDataAdapter(cmd);
                adp.Fill(ds);
                conn.Close();
                List<CascadingDropDownNameValue> SubFoldetails = new List<CascadingDropDownNameValue>();
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    string SubFolID = dr["subfolder"].ToString();
                    string subFolName = dr["TradeName"].ToString();
                    SubFoldetails.Add(new CascadingDropDownNameValue(subFolName, SubFolID));
                }
                return SubFoldetails.ToArray();
            }
        }
    }

    2.webform1.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication8.WebForm1" %>
    
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>MyDemo-CascadingDropDown for asp.net</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
            <div>
                Category :
                <asp:DropDownList ID="ddarchive" runat="server"></asp:DropDownList>
                <asp:CascadingDropDown ID="ccarchive" runat="server" Category="arc" TargetControlID="ddarchive" LoadingText="Loading Archives.." PromptText="Select Archive" ServiceMethod="BindArchive" ServicePath="WebService1.asmx" />
                <br />
                Products :
                <asp:DropDownList ID="ddFolder" runat="server"></asp:DropDownList>
                <asp:CascadingDropDown ID="ccFolder" runat="server" Category="DepId" TargetControlID="ddFolder" ParentControlID="ddarchive" LoadingText="Loading Folders.." PromptText="Select Folder" ServiceMethod="BindFolder" ServicePath="WebService1.asmx" />
                <br />
                Supplier :
                <asp:DropDownList ID="ddSubfolder" runat="server"></asp:DropDownList>
                <asp:CascadingDropDown ID="ccSubfolder" runat="server" Category="TradeId" TargetControlID="ddSubfolder" ParentControlID="ddFolder" LoadingText="Loading SubFolders" PromptText="Select SubFolder" ServiceMethod="BindSubfolder" ServicePath="WebService1.asmx" />
            </div>
        </form>
    </body>
    </html>
    

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Tuesday, April 21, 2015 10:41 AM

All replies

  • User1970566204 posted

    alamdreal1

    //SubFolder bind
        [WebMethod]
        public CascadingDropDownNameValue[] BinSubfolder(string knownCategoryValues, string category)
        {
            DataSet ds = new DataSet();
            char FolderID;
            StringDictionary folderdetails = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
            /*****  FolderID = Convert.ToChar(folderdetails["DepName"]); *******/

    FolderID = Convert.ToChar(folderdetails["DepId"]);


    Tuesday, April 21, 2015 7:27 AM
  • User1173249824 posted

    asyed4u

    FolderID = Convert.ToChar(folderdetails["DepId"]);

    Its Still give thesame error  value cannot be null @ FolderID = Convert.ToChar(folderdetails["DepId"]);

    what might be the cause pls

    Thanks

    Tuesday, April 21, 2015 9:19 AM
  • User1970566204 posted

    Hi,

     when i worked your code , [ i connect with northwind]

    its produce two error,

    1)  closing class blcok

    2) method name mismatch 

    ServiceMethod="BindSubfolder"

         but in Servicee ........ BinSubFolder()

    After these two fix, you code works fine,

    Try like above , otherwise i will post entire my working sample 

    Tuesday, April 21, 2015 10:28 AM
  • User1970566204 posted

    1 .WebService1.asmx

    using System;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;
    using System.Web.Services;
    using AjaxControlToolkit;
    
    namespace WebApplication8
    {
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        [System.Web.Script.Services.ScriptService]
        public class WebService1 : WebService
        {
            private SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);
            [WebMethod]
            public CascadingDropDownNameValue[] BindArchive(string knownCategoryValues, string category)
            {
                DataSet ds = new DataSet();
                conn.Open(); //select * from [ST-Dep]
                SqlCommand cmd = new SqlCommand("SELECT CategoryID as arc ,CategoryName as EmpCategoryName FROM Categories", conn);
                SqlDataAdapter adp = new SqlDataAdapter(cmd);
                cmd.ExecuteNonQuery();
                adp.Fill(ds);
                conn.Close();
                List<CascadingDropDownNameValue> ArchiveDetails = new List<CascadingDropDownNameValue>();
                foreach (DataRow Dr in ds.Tables[0].Rows)
                {
                    string ArcID = Dr["arc"].ToString();
                    string ArcName = Dr["EmpCategoryName"].ToString();
                    ArchiveDetails.Add(new CascadingDropDownNameValue(ArcName, ArcID));
                }
                return ArchiveDetails.ToArray();
            }
            [WebMethod]
            public CascadingDropDownNameValue[] BindFolder(string knownCategoryValues, string category)
            {
                DataSet ds = new DataSet();
                string ArcID; //char ArcID;  //only for my purpose
                StringDictionary ArchiveDetails = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
                // ArcID = Convert.ToChar(ArchiveDetails["arc"]); //only for my purpose
                ArcID = Convert.ToString(ArchiveDetails["arc"]);
                conn.Open(); //SELECT  * From [ST-Dep] where DepId=@DepId
                SqlCommand cmd = new SqlCommand("SELECT SupplierID as folder ,ProductName as DepName FROM Products where CategoryID=@DepId", conn);
                cmd.Parameters.AddWithValue("@DepId", ArcID);
                cmd.ExecuteNonQuery();
                SqlDataAdapter adp = new SqlDataAdapter(cmd);
                adp.Fill(ds);
                conn.Close();
                List<CascadingDropDownNameValue> FolderDetails = new List<CascadingDropDownNameValue>();
                foreach (DataRow Dr in ds.Tables[0].Rows)
                {
                    string FolderID = Dr["folder"].ToString();
                    string FolderName = Dr["DepName"].ToString();
                    FolderDetails.Add(new CascadingDropDownNameValue(FolderName, FolderID));
                }
                return FolderDetails.ToArray();
            }
            //SubFolder bind
            [WebMethod]                  /*BinSubfolder*/
            public CascadingDropDownNameValue[] BindSubfolder(string knownCategoryValues, string category)                                        
            {
                DataSet ds = new DataSet();
                string FolderID;   //char FolderID; //only for my purpose
                StringDictionary folderdetails = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
                //FolderID = Convert.ToChar(folderdetails["DepId"]); //only for my purpose
                FolderID = Convert.ToString(folderdetails["DepId"]);
                conn.Open(); //Select * From Doc where folder = @Folder
                SqlCommand cmd = new SqlCommand("SELECT SupplierID as subfolder,CompanyName as TradeName FROM Suppliers where SupplierID=@Folder ", conn);
                cmd.Parameters.AddWithValue("@Folder", FolderID);
                cmd.ExecuteNonQuery();
                SqlDataAdapter adp = new SqlDataAdapter(cmd);
                adp.Fill(ds);
                conn.Close();
                List<CascadingDropDownNameValue> SubFoldetails = new List<CascadingDropDownNameValue>();
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    string SubFolID = dr["subfolder"].ToString();
                    string subFolName = dr["TradeName"].ToString();
                    SubFoldetails.Add(new CascadingDropDownNameValue(subFolName, SubFolID));
                }
                return SubFoldetails.ToArray();
            }
        }
    }

    2.webform1.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication8.WebForm1" %>
    
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>MyDemo-CascadingDropDown for asp.net</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
            <div>
                Category :
                <asp:DropDownList ID="ddarchive" runat="server"></asp:DropDownList>
                <asp:CascadingDropDown ID="ccarchive" runat="server" Category="arc" TargetControlID="ddarchive" LoadingText="Loading Archives.." PromptText="Select Archive" ServiceMethod="BindArchive" ServicePath="WebService1.asmx" />
                <br />
                Products :
                <asp:DropDownList ID="ddFolder" runat="server"></asp:DropDownList>
                <asp:CascadingDropDown ID="ccFolder" runat="server" Category="DepId" TargetControlID="ddFolder" ParentControlID="ddarchive" LoadingText="Loading Folders.." PromptText="Select Folder" ServiceMethod="BindFolder" ServicePath="WebService1.asmx" />
                <br />
                Supplier :
                <asp:DropDownList ID="ddSubfolder" runat="server"></asp:DropDownList>
                <asp:CascadingDropDown ID="ccSubfolder" runat="server" Category="TradeId" TargetControlID="ddSubfolder" ParentControlID="ddFolder" LoadingText="Loading SubFolders" PromptText="Select SubFolder" ServiceMethod="BindSubfolder" ServicePath="WebService1.asmx" />
            </div>
        </form>
    </body>
    </html>
    

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Tuesday, April 21, 2015 10:41 AM