Posted 8 November 2018, 2:25 am EST
- Updated 3 October 2022, 4:45 pm EST
Jitender,
It partially works in my project, the total grid count is 1683 and selecting the blank value filters the list to 1671 but selecting only the icon from the imagelist produces an empty grid?
My code:
lvwListView.Visible = False
' Start Putting the Icon into the filter values list
Dim imageMap = New Dictionary(Of String, Image)
imageMap.Add("FileSaved", Me.imlIconsSmall.Images.Item(gstrICON_ITEM_FILE_SAVED))
flxMain.ColumnCollection.Item(flxMain.ColumnCollection.IndexOf(gstrCOL_KEY_FILE_SAVED)).ImageMap = imageMap
flxMain.ColumnCollection.Item(flxMain.ColumnCollection.IndexOf(gstrCOL_KEY_FILE_SAVED)).ImageAndText = False
flxMain.ColumnCollection.Item(flxMain.ColumnCollection.IndexOf(gstrCOL_KEY_FILE_SAVED)).ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.CenterCenter
Dim editor = flxMain.ColumnCollection.Item(flxMain.get_ColIndex(gstrCOL_KEY_NAME)).Filter.GetEditor()
' Comment this line if you only want (Blank + column header) in filter list
AddHandler flxMain.MouseClick, AddressOf flxMain_MouseClick
flxMain.Visible = True
’ gstrCOL_KEY_NAME is Name (the first column which has a unique value) where you used .Cols(1).Filter.Editor
’ gstrCOL_KEY_NAME is FileSaved
’ My version of the grid doesn’t have .flxmain.Cols(2) so I’ve used flxMain.ColumnCollection.Item(flxMain.ColumnCollection.IndexOf(gstrCOL_KEY_FILE_SAVED))
Private Sub flxMain_MouseClick(sender As Object, e As MouseEventArgs)
Dim hitTestInfo = flxMain.HitTest(e.Location)
On Error GoTo VB_Error
If mblnLoading Then
Exit Sub
End If
If hitTestInfo.Column = flxMain.get_ColIndex(gstrCOL_KEY_FILE_SAVED) AndAlso hitTestInfo.Type = HitTestTypeEnum.FilterIcon Then
ResizeFilterWindow()
End If
Exit Sub
VB_Error:
Call gReportError(gstrVBUnexpectedErrorText("flxMain_MouseClick"), MsgBoxStyle.Critical, Me.Text, Err.Number)
End Sub
Private Sub ResizeFilterWindow()
On Error GoTo VB_Error
For Each frm As Form In Application.OpenForms
If frm.Name = "FilterEditorForm" AndAlso frm.GetType().ToString() = "C1.Win.C1FlexGrid.FilterEditorForm" Then
mfrmFilterForm = frm
AddHandler frm.FormClosing, AddressOf Frm_FormClosing
AddHandler CType(frm.Controls(0), ToolStrip).ItemClicked, AddressOf Frm_ItemClicked
frm.Controls.RemoveAt(1)
Dim c1List1 As C1.Win.C1List.C1List = New C1.Win.C1List.C1List()
frm.Controls.Add(c1List1)
c1List1.Caption = ""
c1List1.Dock = DockStyle.Fill
c1List1.ShowHeaderCheckBox = True
c1List1.SelectionMode = C1.Win.C1List.SelectionModeEnum.CheckBox
c1List1.DataMode = C1.Win.C1List.DataModeEnum.AddItem
c1List1.ExtendRightColumn = True
c1List1.ItemHeight = 24
c1List1.Style.VerticalAlignment = C1.Win.C1List.AlignVertEnum.Center
c1List1.Columns.Add(New C1.Win.C1List.C1DataColumn())
c1List1.Columns(0).Caption = "(Select All)"
c1List1.AddItem("")
c1List1.AddItem(gstrCOL_KEY_FILE_SAVED)
c1List1.Columns(0).ValueItems.Values.Add(New C1.Win.C1List.ValueItem("", ""))
c1List1.Columns(0).ValueItems.Values.Add(New C1.Win.C1List.ValueItem(gstrCOL_KEY_FILE_SAVED, Me.imlIconsSmall.Images.Item(gstrICON_ITEM_FILE_SAVED)))
c1List1.Columns(0).ValueItems.Translate = True
Dim obj As Object
Dim cf = flxMain.ColumnCollection.Item(flxMain.ColumnCollection.IndexOf(gstrCOL_KEY_FILE_SAVED))
If (cf.Filter.IsActive) Then
For Each obj In (CType(cf.Filter, ValueFilter)).ShowValues
If (obj IsNot Nothing) Then
Dim rowIndex = c1List1.FindStringExact(obj.ToString(), 0)
c1List1.SelectedIndices.Add(rowIndex)
End If
Next
End If
Exit For
End If
Next
Exit Sub
VB_Error:
Call gReportError(gstrVBUnexpectedErrorText("ResizeFilterWindow"), MsgBoxStyle.Critical, Me.Text, Err.Number)
End Sub
Private Sub Frm_FormClosing(sender As Object, e As FormClosingEventArgs)
Dim iSelectedLoop As Integer
On Error GoTo VB_Error
Dim cf = flxMain.ColumnCollection.Item(flxMain.ColumnCollection.IndexOf(gstrCOL_KEY_FILE_SAVED))
If mstrFilterActionString = "Apply" Then
Dim lst = CType(mfrmFilterForm.Controls(1), C1.Win.C1List.C1List)
Dim selList = New List(Of Object)
For iSelectedLoop = 0 To lst.SelectedIndices.Count - 1
Dim rowIndex = lst.SelectedIndices(iSelectedLoop)
selList.Add(lst.Columns(0).CellValue(rowIndex))
Next
cf = flxMain.ColumnCollection.Item(flxMain.ColumnCollection.IndexOf(gstrCOL_KEY_FILE_SAVED))
Dim vFilter = New ValueFilter()
vFilter.ShowValues = selList.ToArray()
cf.Filter = vFilter
ElseIf mstrFilterActionString = "Clear" Then
cf.Filter = Nothing
End If
Exit Sub
VB_Error:
Call gReportError(gstrVBUnexpectedErrorText("Frm_FormClosing"), MsgBoxStyle.Critical, Me.Text, Err.Number)
End Sub
Private Sub Frm_ItemClicked(sender As Object, e As ToolStripItemClickedEventArgs)
If e.ClickedItem.Name = "_btnApplyFilter" Then
mstrFilterActionString = "Apply"
ElseIf (e.ClickedItem.Name = "_btnClearFilter") Then
mstrFilterActionString = "Clear"
Else
mstrFilterActionString = "Cancel"
End If
End Sub
So can you see anything wrong that may stop the icon filter from showing the data?
Thanks
Martin