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 IfEnd Sub