Φαντάζομαι με αυτά που λές ότι θα ήθελες να εφαρμόσεις κάποιο φίλτρο σε μια φόρμα
Πεδία στην φόρμα
ComboBox Name=cboOperator
ComboBox Name=cboGridColumn02
Button Name=btnApplyFilters
Button Name=btnAddFilter
Button Name=btnRemoveFilters
Listbox Name=lstFilters
TextBox Name=txtCriteria
grid Name=grdInfo
'Στο cboOperator προσθέτουμε Items >,<,=,>=,<=,%
' Προσθέτει στό ListBox τα κριτήρια που θέλουμε
Private Sub btnAddFilter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddFilter.Click
Dim Criteria As String = "'" & txtCriteria.Text & "'"
If Criteria.Length > 0 Then
If IsNumeric(txtCriteria.Text) Then
Criteria = txtCriteria.Text
End If
'cboOperator.SelectedIndex =6 είναι το Like εάν το εισαγάγουμε σέ άλλο index πρέπει να αλλαχθεί στον κώδικα
If cboOperator.SelectedIndex = 6 Then
Criteria = "Like '%" & txtCriteria.Text & "%'"
lstFilters.Items.Add(CType(cboGridColumn02.SelectedItem, DataGridColumnStyle).MappingName & " " & Criteria)
Else
lstFilters.Items.Add(CType(cboGridColumn02.SelectedItem, DataGridColumnStyle).MappingName.ToString & " " & CType(cboOperator.SelectedItem, String) & " " & Criteria)
End If
cboGridColumn02.SelectedIndex = 0
cboOperator.SelectedIndex = 0
txtCriteria.Text = Nothing
End If
End Sub
' Εκτελεί το Φίλτρο που δημιουρήσαμε
Private Sub btnApplyFilters_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnApplyFilters.Click
If CType(btnApplyFilters.Tag, Byte) = 1 Then 'if Tag = 1 then Filter was used
btnApplyFilters.Tag = 0
ApplyFilters()
Else
btnApplyFilters.Tag = 1
ApplyFilters()
End If
End Sub
'Αφαιρεί το φίλτρο
Private Sub btnRemoveFilters_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveFilters.Click
Dim i As Integer
If lstFilters.Items.Count > -1 Then
For i = lstFilters.Items.Count - 1 To i Step -1
If lstFilters.GetSelected(i) = True Then
lstFilters.Items.RemoveAt(i)
End If
Next
btnApplyFilters.PerformClick()
End If
End Sub
'Διαγραφή ένος κριτηρίου του φίλτρου από το ListBox
Private Sub lstFilters_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles lstFilters.KeyDown
If e.KeyData = Keys.Delete Then
lstFilters.Items.RemoveAt(lstFilters.SelectedIndex)
btnApplyFilters.PerformClick()
End If
End Sub
' Εφαρμογή του Φίλτρου και εμφάνιση των γραμμών που εκπληρούν τα κριτήρια στο Grid
Private Sub ApplyFilters()
Dim i As Integer
Dim RowFilter As String
For i = 0 To lstFilters.Items.Count - 1
RowFilter &= CType(lstFilters.Items(i), String) & " And "
Next
Try
If Not RowFilter Is Nothing AndAlso RowFilter.Length > 0 Then
CType(grdInfo.DataSource, DataView).RowFilter = RowFilter.Remove(RowFilter.Length - 5, 5)
Else
CType(grdInfo.DataSource, DataView).RowFilter = Nothing
End If
Catch ex As Exception
MessageBox.Show(ex.Message, ex.Source, MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1)
End Try
End Sub
Tο παραπάνω μπορείς να το σκεφτείς και σαν μιά Template Φορμα που μπορείς νά την κάνεις Inherit σε άλλες φόρμες
Σημείωση :Επειδή το παραπάνω έγινε γρήγορα και δέν έχει τεσταριστεί πλήρως ίσως νά χρειάζεται κάποιες διορθώσεις.
Ιωάννης Μανουσάκης