Saturday, March 24, 2012

CascadingDropDown with a database

I have read several similar post but yet no solution

Hello I am tryingto use Ajax CascadingDropDown with a database.

My database structure is:

IssueID(PK)
GroupID
ParentIssueID
IssueName


There are 3 dropdown list.
The first dropdown list retrieves data from the datble with parent ID = -1.
While the second drop down list retrieves it info based on the selected value (ID) of the first dropdownlist.

say we have in the table:

IssueID GroupID ParentIssueID IssueName
1 1 -1 Housing
2 1 1 Electronics
3 2 -1 Garden
4 1 2 Microwave

So, in the case the first dropdown retrives all data from the table with (ParentIssueID= -1) so here we have: Housing and Garden. both IssueIS and IssueName are returned.

Onselecting (say housing), the second dropdown retrieves any row with -> ParentIssueID = IssueID(value of ddl) of the selected value is the first dropdown. Here we have Electronics retured.

The third dropdown returns the list of rows based of the value of the selected ddl. Here we have Microwave.
Thus we have:
First ddl: Housing
Second ddl: Electronics
Third ddl: Microwave


Below is my web method:

<WebMethod()> _
Public Function GetMainIssue(ByVal knownCategoryValues As Integer, ByVal category As String) As CascadingDropDownNameValue()
Dim maindepth As Integer = 1

Dim mainIssueAdapter As New mainIsseDataTableAdapters.GetDepthTableAdapter()
Dim mainIssue As mainIsseData.GetDepthDataTable = mainIssueAdapter.GetMainIssue(maindepth)
Dim values As New List(Of CascadingDropDownNameValue)()

For Each dr As DataRow In mainIssue
Dim IssueName As String = DirectCast(dr("IssueName"), String)
Dim IssueID As Integer = CInt(dr("IssueID"))
values.Add(New CascadingDropDownNameValue(IssueName, IssueID))
Next

Return values.ToArray()

End Function


<WebMethod()> _
Public Function GetSubIssue(ByVal knownCategoryValues As Integer, ByVal category As String) As CascadingDropDownNameValue()

Dim kv As StringDictionary = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)
Dim IssueID As Integer

If Not kv.ContainsKey("mainIssue") OrElse Not Int32.TryParse(kv("mainIssue"), IssueID) Then
Return Nothing
End If

Dim subIssuesAdapter As New subIssueDataTableAdapters.GetAllCategoryTableAdapter()
Dim subIssue As subIssueData.GetAllCategoryDataTable = subIssuesAdapter.GetSubIssue(IssueID)

Dim values As New List(Of CascadingDropDownNameValue)()

For Each dr As DataRow In subIssue
values.Add(New CascadingDropDownNameValue(DirectCast(dr("IssueName"), String), dr("IssueID").ToString()))
Next

Return values.ToArray()

End Function


In my aspx file I have
<asp:DropDownList id="drpMainCategory" runat="server">

<cc1:cascadingdropdown id="CascadingDropDown2" runat="server" loadingtext="[Loading...]"
prompttext="Please select a Main Issue" servicepath="../UpdateDropDown.asmx"
targetcontrolid="drpMainCategory" Category="getmain" ServiceMethod="GetMainIssue"></cc1:cascadingdropdown>

I get an error(500 or 12030) when I run it.
Also, I cant figure out what exactly the category field is for <cc1:cascadingdropdown control. how do I optain it. Any comments or similar code to help would be greatly appreciated.
Thanks

Please refer to this thread: http://forums.asp.net/t/1122659.aspx

No comments:

Post a Comment