Set value of ComboDescriptor for predefined filter

2 posts, 0 answers
  1. Mark
    Mark avatar
    28 posts
    Member since:
    Jan 2014

    Posted 24 Aug 2018 Link to this post

         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?


    Here is my code:

    Building the Filter Nodes Dynamically:

    Private Sub SetupFilter(ByRef FilterDT As DataTable)
            Dim sFilterHold As String = RadDataFilter1.Expression
            Me.RadDataFilter1.DataSource = FilterDT
            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.Tag = dr("DisplayText")
                    Dim DescItem As New DataFilterDescriptorItem()
                    DescItem.DescriptorName = dr("FilteredColumnName")
                    DescItem.DescriptorType = Type.GetType(dr("FilterDataType"))
                    DescItem.Tag = dr("DisplayText")
                End If
            End While
            dr = Nothing
            Me.RadDataFilter1.Expression = sFilterHold
            If Me.RadDataFilter1.Expression.Length > 0 Then
            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
        End If
    End Sub
  2. Hristo
    Hristo avatar
    1518 posts

    Posted 28 Aug 2018 Link to this post

    Hello Mark,

    Thank you for writing.

    I am not able to reproduce the observed behavior with the latest version which is 2018.2.621, however, I can reproduce it with prior versions. The drop-down list editor in the latest release is affected by a fix of the following item: FIX. RadDropDownList - the selected index is not cleared when the SelectedValue does not exist in the data source

    In case updating to the latest version is not possible, you can consider setting the DefaultValue property of the combo descriptor item. Please check my code snippet below: 
    private void radButton1_Click(object sender, EventArgs e)
        List<int> listData = new List<int> { 1, 2, 3, 4, 5 };
        DataFilterComboDescriptorItem comboItem = new DataFilterComboDescriptorItem();
        comboItem.DescriptorName = "Custom 2";
        comboItem.DataSource = new List<int> { 1, 2, 3, 4, 5 };
        comboItem.DefaultValue = null;

    I hope this will help. Let me know if you need further assistance.

    Progress Telerik
    Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
Back to Top