mlg101
asked on
Get category from cascading dropdown extender
I am having a problem getting the correct key name id from my cascading dropdown extender. I am getting no rows returned when there are rows available. I'm not getting a method error, just no rows returned, so I think I'm not getting the correct key. Below is my code. I'm using the same table and column for both dropdown lists. Just taking data for Day of Week on the 1st ddl, and Time of Day on the 2nd ddl, using the same datetime field. I'm not sure if on the category property of the cascadingdropdown list is correct, and the knowncategory values is correct on the webmethod.
Thank you.
Thank you.
<asp:DropDownList ID="LessonDay" runat="server" >
</asp:DropDownList><asp:CascadingDropDown ID="CascLessonDay" Category="Days"
PromptText="Select Day"
ServiceMethod="GetDay"
ServicePath="~/Teachers.asmx"
TargetControlID="LessonDay" runat="server">
</asp:CascadingDropDown>
<asp:DropDownList ID="LessonTime" runat="server" >
</asp:DropDownList><asp:CascadingDropDown ID="CasclessonTime"
category="Times" LoadingText="[Loading Class Times...]"
ParentControlID="LessonDay" EmptyText="There are no times available on this day"
PromptText="Please Select Time"
ServiceMethod="GetTime"
ServicePath="~/Teachers.asmx"
TargetControlID="LessonTime"
runat="server">
</asp:CascadingDropDown>
<WebMethod()> _
Public Function GetDay(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
Dim strConnection As String = ConfigurationManager.ConnectionStrings("BurgoyneMusicConnectionString").ConnectionString
Dim sqlConn As SqlConnection = New SqlConnection(strConnection)
Dim strDayQuery As String = "Select id, InstrumentID, TeacherID, DATENAME(dw , EventStart) As Days, DATEPART(dw, EventStart), Available, EventStart, EventEnd FROM Events WHERE id IN (SELECT MAX(id) FROM Events WHERE InstrumentID = @InstrumentID And TeacherID = @TeacherID And Available <> 'False' Group by DATENAME(dw, EventStart) ) Order by DATEPART(dw, EventStart)"
Dim cmdFetchDay As SqlCommand = New SqlCommand(strDayQuery, sqlConn)
Dim dtrDay As SqlDataReader
Dim kvDays As StringDictionary = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)
Dim intTeachID As Integer
If Not kvDays.ContainsKey("Instrument") Or Not Int32.TryParse(kvDays("Instrument"), intTeachID) Then
Return Nothing
End If
cmdFetchDay.Parameters.AddWithValue("@InstrumentID", intTeachID)
Dim myDays As New List(Of CascadingDropDownNameValue)
sqlConn.Open()
dtrDay = cmdFetchDay.ExecuteReader
While dtrDay.Read()
Dim strDayName As String = dtrDay("Days").ToString
Dim strDayId As String = dtrDay("id").ToString
myDays.Add(New CascadingDropDownNameValue(strDayName, strDayId))
End While
Return myDays.ToArray
End Function
<WebMethod()> _
Public Function GetTime(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
Dim strConnection As String = ConfigurationManager.ConnectionStrings("BurgoyneMusicConnectionString").ConnectionString
Dim sqlConn As SqlConnection = New SqlConnection(strConnection)
Dim strTimeQuery As String = "SELECT id, TeacherID, InstrumentID, right(convert(varchar(19), EventStart, 100),6) As Times, Available, DatePart(dw, EventStart), EventStart, EventEnd FROM Events WHERE id IN (SELECT MAX(id) FROM Events WHERE DatePart(dw, EventStart) = @DayOfWeekID and InstrumentID = @InstrumentID and TeacherID = @TeacherID and Available <> 'False' Group by right(convert(varchar(19), EventStart, 100),6), DatePart(dw, EventStart) )"
Dim cmdFetchTime As SqlCommand = New SqlCommand(strTimeQuery, sqlConn)
Dim dtrTime As SqlDataReader
Dim kvTime As StringDictionary = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)
Dim intDayId As Integer
If Not kvTime.ContainsKey("Days") Or Not Int32.TryParse(kvTime("Days"), intDayId) Then
Return Nothing
End If
cmdFetchTime.Parameters.AddWithValue("@InstrumentID", "1")
cmdFetchTime.Parameters.AddWithValue("@TeacherID", "1")
cmdFetchTime.Parameters.AddWithValue("@DayofWeekID", intDayId)
Dim myTime As New List(Of CascadingDropDownNameValue)
sqlConn.Open()
dtrTime = cmdFetchTime.ExecuteReader
While dtrTime.Read()
Dim strTimeName As String = dtrTime("Time").ToString
Dim strTimeId As String = dtrTime("id").ToString
myTime.Add(New CascadingDropDownNameValue(strTimeName, strTimeId))
End While
Return myTime.ToArray
End Function
ASKER
Yes, sorry, I was trying to simplify it. I have actually 4 ddls with cascading. The first one here is getting its value from Instrument and it is working fine. I am just having problems with the last ddl, which shares the same table column and row as its parent ddl.
ASKER
I clarified my quesiton in a different question, because I narrowed my problem down, but still need a solution: you can find it at the link below or click on my username to find it. Thank you.
https://www.experts-exchange.com/questions/26457119/CascadingDropDown-question.html
https://www.experts-exchange.com/questions/26457119/CascadingDropDown-question.html
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Dim intTeachID As Integer
If Not kvDays.ContainsKey("Instru
Return Nothing
End If
I don't see where you are pulling a value for "Instrument" from...
Espavo