I have a RadDataFilter linked to a RadDataGrid which is functioning as desired. I have a RadChartView (Bar Chart) that is a summary of what is being displayed in the Grid. When I click a bar in the bar chart, I am populating the filter with a string that will filter the grid on only the rows that are related to the Bar.
Everything in this scenario is working, in that I get the filter looking correctly, based on the bar I clicked and the grid properly filtering. The issue is that the filter item is DataFilterComboDescriptorItem and it is not displaying the correct value in the dropdown for the item specified. It is basically displaying the last value ever selected, regardless of if I clear the filter.
How is the value of a DataFilterComboDescriptorItem set when a RadDataFilter.Expression is manually assigned which affects that item?
Thoughts?
Here is my code:
Building the Filter Nodes Dynamically:
Private Sub SetupFilter(ByRef FilterDT As DataTable)
Dim sFilterHold As String = RadDataFilter1.Expression
RadDataFilter1.Descriptors.Clear()
Me.RadDataFilter1.DataSource = FilterDT
RadDataFilter1.Descriptors.Clear()
Dim sSQL As String = "SELECT FilteredColumnName,DisplayText,FilterDataType FROM dbo.MAPPS_GridFilterDetail WHERE FilterHeaderId = 1 AND ActiveYN = 1"
Dim dr As SqlDataReader = CLIB_MAPPS.Configuration.DBAccess.getSQLDataReader(sSQL)
While dr.Read
If dr("FilterDataType") = "DropDownList" Then
Dim ddItem As New DataFilterComboDescriptorItem()
ddItem.DescriptorName = dr("FilteredColumnName")
ddItem.DescriptorType = GetType(Integer)
ddItem.DataSource = GetTable(dr("FilteredColumnName"))
ddItem.ValueMember = "ID"
ddItem.DisplayMember = "Description"
ddItem.DropDownStyle = RadDropDownStyle.DropDown
ddItem.AutoCompleteMode = AutoCompleteMode.Suggest
ddItem.FilterOperators.Clear()
ddItem.FilterOperators.Add(Telerik.WinControls.Data.FilterOperator.IsEqualTo)
ddItem.FilterOperators.Add(Telerik.WinControls.Data.FilterOperator.IsNotEqualTo)
ddItem.Tag = dr("DisplayText")
RadDataFilter1.Descriptors.Add(ddItem)
Else
Dim DescItem As New DataFilterDescriptorItem()
DescItem.DescriptorName = dr("FilteredColumnName")
DescItem.DescriptorType = Type.GetType(dr("FilterDataType"))
DescItem.Tag = dr("DisplayText")
RadDataFilter1.Descriptors.Add(DescItem)
End If
End While
dr.Close()
dr = Nothing
Me.RadDataFilter1.Expression = sFilterHold
If Me.RadDataFilter1.Expression.Length > 0 Then
Me.ApplyFilter()
End If
End Sub
Private Function GetTable(ByVal sColName As String) As DataTable
Dim sSQL As String = ""
Select Case sColName
Case "Priority_Id"
sSQL = "SELECT Priority_Id ID,convert(varchar(10), Priority_Id) + ' - ' + Priority_Description Description FROM Priority ORDER BY Priority_Id"
Case "Category_Id"
sSQL = "SELECT Category_Id ID, Cat_Description Description FROM Category ORDER BY Category_Id"
Case "EA_Id"
sSQL = "SELECT EA_Id ID, Adequecy_Desc Description FROM Education_Adequecy ORDER BY EA_Id"
Case "Status"
sSQL = "SELECT Status ID, Description Description FROM Deficiency_Assessment_Status_Lookup ORDER BY Status"
Case "System_Id"
sSQL = "SELECT System_Id ID, Systems_Name Description FROM Systems ORDER BY Systems_Order"
Case "Unit_Id"
sSQL = "SELECT Unit_Id ID, Unit Description FROM Unit_Lookup ORDER BY Unit"
End Select
Dim ds As DataSet = CLIB_MAPPS.Configuration.DBAccess.getDataSet(sSQL, "FilterTable")
Return ds.Tables(0)
End Function
Click Event from the Bar Chart to set the filter:
Private Sub radchrtRenoCostBySystem_SelectedPointChanged(sender As Object, args As ChartViewSelectedPointChangedEventArgs)
If args.NewSelectedPoint IsNot Nothing Then
Dim sSystemID As String = DirectCast(args.NewSelectedPoint.DataItem, System.Data.DataRowView).Row.ItemArray(0)
Me.RadDataFilter1.Expression = "[System_Id] = " & sSystemID
'THIS IS WHERE I WOULD WANT TO SET THE VALUE IN THE DROPDOWN TO MATCH THE sSystemID SELECTED
ApplyFilter()
End If
End Sub