This blog deals with yet another utility implementation of C1FlexGrid for Winforms. Two most important features offered by this grid are Filtering and Sorting. On applying any of these functionality on the grid, the visual changes are easily noticeable. However, there is a certain set of information that cannot be determined by simply looking at the resultant grid. You need to explicitly display the information, after writing some code to retrieve those values. This blog guides how to retrieve the following information when Filtering and Sorting operations are performed on C1Flexgrid:
A. Type of Filtering : Single/Multi Column This value tells you whether the filtering is applied on a single column or on multiple columns. B. Number of the Filtered Columns This will list the total number of filtered columns C. Name of the Columns Filtered This will list the names of all the filtered columns D. Total number of Rows This will show the total number of rows in C1Flexgrid E. Count of Filtered rows Ideally, if you wish to retrieve the Row count value after filtering, you will use the property 'Rows.Count'. However, this will give you the total rows present in C1FlexGrid (without filtering). This code implementation below helps to get the number of visible rows after filtering. F. Actual Index of the Selected Cell It gives you the original Cell index as in the DataSource of the **C1Flexgrid. G. Visible Index of the Selected Cell** It gives you the Cell index as visible after filtering You may refer to the following code to implement the above discussed features :
Private Sub C1FlexGrid1_AfterFilter(ByVal sender As Object, ByVal e As System.EventArgs) Handles C1FlexGrid1.AfterFilter
Name_FilteredCol.Text = ""
Filtering_Type.Text = "NA"
count_filter = 0
ivisible = 0
'getting the count of visible rows
With C1FlexGrid1
For i = 1 To .Rows.Count - 1 ' Beginning from 1 (0 is Header)
If .Rows(i).IsVisible Then
ivisible += 1
End If
Next
End With
'check if filtering applied and get the name and total number of filtered columns
With C1FlexGrid1
For i = 1 To .Cols.Count - 1
If .Cols(i).Filter.IsActive Then
count_filter += 1
If count_filter > 1 Then
Name_FilteredCol.Text += ", "
End If
Name_FilteredCol.Text += C1FlexGrid1.Cols(i).Name
End If
Next
End With
If count_filter = 0 Then
Filtering_Type.Text = "NA"
Name_FilteredCol.Text = "NA"
C1SplitterPanel1.Text = "Filtering : NA"
Number_FilteredCol.Text = "NA"
ElseIf count_filter = 1 Then
Filtering_Type.Text = "Single Column"
C1SplitterPanel1.Text = "Filtering : Applied"
Number\_FilteredCol.Text = count\_filter.ToString
ElseIf count_filter > 1 Then
Filtering_Type.Text = "Multi Column"
C1SplitterPanel1.Text = "Filtering : Applied"
Number\_FilteredCol.Text = count\_filter.ToString
End If
Count_TotalRows.Text = (C1FlexGrid1.Rows.Count - 1).ToString
Count_FilteredRows.Text = ivisible.ToString
End Sub
Private Sub C1FlexGrid1_AfterSelChange(ByVal sender As Object, ByVal e As C1.Win.C1FlexGrid.RangeEventArgs) Handles C1FlexGrid1.AfterSelChange
e.Cancel = True
CellIndex_Actual.Text = "Cell(" & e.NewRange.r1.ToString & "," & e.NewRange.c1.ToString & ")"
ivisible = 0
'getting the visible index of the selected cell
With C1FlexGrid1
For i = 1 To .Rows.Count - 1 ' Beginning from 1 (0 is Header)
If .Rows(i).IsVisible Then
ivisible += 1
If .Rows(i).Selected = True Then
CellIndex_Visible.Text = "Cell(" & ivisible.ToString & "," & C1FlexGrid1.ColSel.ToString & ")"
End If
End If
Next
End With
End Sub
A. Type of Sorting : Single/Multi Column This value tells you whether the sorting is applied on a single column or on multiple columns. B. Number of the Sorted Columns This will list the total number of sorted columns C. Name of the Sorted Columns This will list the names of all the sorted columns D. Sort Order of the Columns This will list the SortOrder applied on each of the sorted columns. This listing would be in sync with the list of the names of the sorted columns. Refer to the following code to implement the above discussed features :
Private Sub C1FlexGrid1_AfterSort(ByVal sender As Object, ByVal e As C1.Win.C1FlexGrid.SortColEventArgs) Handles C1FlexGrid1.AfterSort
count_sort = 0
Name_SortedCol.Text = ""
SortOrder_Col.Text = ""
'check if sorting is applied and get the count of the sorted columns
'also getting the list of the names of the sorted columns
With C1FlexGrid1
For i = 1 To .Cols.Count - 1 ' Beginning from 1 (0 is Header)
If .Cols(i).Sort = C1.Win.C1FlexGrid.SortFlags.Ascending Then
count_sort += 1
If count_sort > 1 Then
Name_SortedCol.Text += ", "
SortOrder_Col.Text += ","
End If
Name_SortedCol.Text += C1FlexGrid1.Cols(i).Name
SortOrder_Col.Text += "Ascending"
ElseIf C1FlexGrid1.Cols(i).Sort = C1.Win.C1FlexGrid.SortFlags.Descending Then
count_sort += 1
If count_sort > 1 Then
Name_SortedCol.Text += ", "
SortOrder_Col.Text += ","
End If
Name_SortedCol.Text += C1FlexGrid1.Cols(i).Name
SortOrder_Col.Text += "Descending"
End If
Next
End With
If count_sort = 0 Then
Sorting_Type.Text = ""
ElseIf count_sort = 1 Then
Sorting_Type.Text = "Single Column"
ElseIf count_sort > 1 Then
Sorting_Type.Text = "Multi Column"
End If
Numbr\_SortedCol.Text = count\_sort.ToString
If count_sort > 0 Then
C1SplitterPanel2.Text = "Sorting : Applied"
Else
C1SplitterPanel2.Text = "Sorting : NA"
End If
End Sub
Implementing the above code blocks would give the following output : Download the attached samples VB/C# for complete implementation.
This blog deals with yet another utility implementation of C1FlexGrid. Two most important features offered by this grid are Filtering and Sorting. On applying any of this functionality on the grid, the visual changes are easily noticeable. However, there is a certain set of information that can not be determined by simply looking at the resultant grid as there isn't any way to directly access the same. You need to explicitly write some code to retreive the values of it. This blog guides how to retrieve the following information when Filtering ansd Sorting operations are performed in C1FlexGrid : 1. Filtering : A. Type of Filtering B. Number of the Filtedred Columns C. Name of the Filtered Columns D. Total number of Rows E. Count of the Filtered Rows F. Actual Index of the Selected Cell G. Visible Index of the Selected Cell 2. Sorting : A. Type of Sorted B. numbder of the Sorted Columns C. Name of the Sorted Columns D. Sort Order of the Columns Let's begin with the implementation of the same. Filtering : A. Type of Filtering : Single/Multi Column This value tells whether the filtering is applied on a single column or on multiple columns. B. Number of the Filtedred Columns This will list the total number of filtered columns C. Name of the Columns Filtered This will list the names of all the filtered columns D. Total number of Rows This will show the number of the total rows in c1Flexgrid E. Count of Filtered rows Ideally, when we retrieve the value of 'RowsCount', we get the number of the total rows present in C1FlexGrid. However, the code implementation mentioned below helps us get the number of visible rows after filtering. F. Actual Index of the Selected Cell It gives us the cellindex as in the datasource of the C1Flexgrid G. Visible Index of the Selected Cell It gives us the cellindex as visible to us after filtering You may refer to the following code to implement the above discussed features : Private Sub C1FlexGrid1_AfterFilter(ByVal sender As Object, ByVal e As System.EventArgs) Handles C1FlexGrid1.AfterFilter Name_FilteredCol.Text = "" Filtering_Type.Text = "NA" count_filter = 0 ivisible = 0 With C1FlexGrid1 For i = 1 To .Rows.Count - 1 ' Beginning from 1 (0 is Header) If .Rows(i).IsVisible Then ivisible += 1 End If Next End With With C1FlexGrid1 For i = 1 To .Cols.Count - 1 If .Cols(i).Filter.IsActive Then count_filter += 1 If count_filter > 1 Then Name_FilteredCol.Text += ", " End If Name_FilteredCol.Text += C1FlexGrid1.Cols(i).Name End If Next End With If count_filter = 0 Then Filtering_Type.Text = "NA" Name_FilteredCol.Text = "NA" C1SplitterPanel1.Text = "Filtering : NA" Number_FilteredCol.Text = "NA" ElseIf count_filter = 1 Then Filtering_Type.Text = "Single Column" C1SplitterPanel1.Text = "Filtering : Applied" Number_FilteredCol.Text = count_filter.ToString ElseIf count_filter > 1 Then Filtering_Type.Text = "Multi Column" C1SplitterPanel1.Text = "Filtering : Applied" Number_FilteredCol.Text = count_filter.ToString End If Count_TotalRows.Text = (C1FlexGrid1.Rows.Count - 1).ToString Count_FilteredRows.Text = ivisible.ToString End Sub Private Sub C1FlexGrid1_AfterSelChange(ByVal sender As Object, ByVal e As C1.Win.C1FlexGrid.RangeEventArgs) Handles C1FlexGrid1.AfterSelChange e.Cancel = True CellIndex_Actual.Text = "Cell(" & e.NewRange.r1.ToString & "," & e.NewRange.c1.ToString & ")" ivisible = 0 With C1FlexGrid1 For i = 1 To .Rows.Count - 1 ' Beginning from 1 (0 is Header) If .Rows(i).IsVisible Then ivisible += 1 If .Rows(i).Selected = True Then CellIndex_Visible.Text = "Cell(" & ivisible.ToString & "," & C1FlexGrid1.ColSel.ToString & ")" End If End If Next End With End Sub 2. Sorting : A. Type of Sorting : Single/Multi Column This value tells whether the sorting is applied on a single column or on multiple columns. B. Number of the Sorted Columns This will list the total number of sorted columns C. Name of the Sorted Columns This will list the names of all the sorted columns D. Sort Order of the Columns This will list the sort order applied on each of the sorted column. The listing would be in sync with the list of the names of the sorted columns. You may refer to the following code to implement the above discussed features : count_sort = 0 Name_SortedCol.Text = "" SortOrder_Col.Text = "" With C1FlexGrid1 For i = 1 To .Cols.Count - 1 ' Beginning from 1 (0 is Header) If .Cols(i).Sort = C1.Win.C1FlexGrid.SortFlags.Ascending Then count_sort += 1 If count_sort > 1 Then Name_SortedCol.Text += ", " SortOrder_Col.Text += "," End If Name_SortedCol.Text += C1FlexGrid1.Cols(i).Name SortOrder_Col.Text += "Ascending" ElseIf C1FlexGrid1.Cols(i).Sort = C1.Win.C1FlexGrid.SortFlags.Descending Then count_sort += 1 If count_sort > 1 Then Name_SortedCol.Text += ", " SortOrder_Col.Text += "," End If Name_SortedCol.Text += C1FlexGrid1.Cols(i).Name SortOrder_Col.Text += "Descending" End If Next End With If count_sort = 0 Then Sorting_Type.Text = "" ElseIf count_sort = 1 Then Sorting_Type.Text = "Single Column" ElseIf count_sort > 1 Then Sorting_Type.Text = "Multi Column" End If Numbr_SortedCol.Text = count_sort.ToString If count_sort > 0 Then C1SplitterPanel2.Text = "Sorting : Applied" Else C1SplitterPanel2.Text = "Sorting : NA" End If