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:

Filtering


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

Sorting



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