Bonjour,

Je commence le VB.Net, j'ai difficile à faire une recherche dans un DataGridView. Ca fonctionne sauf qu'il y a un bug et j'aimerai savoir s'il y a une méthode plus facile.

Je fais une requête SQL (MySQL) pour avoir toutes les informations, ensuite les place dans une DataTable ensuite l'envoie dans une liste d'object (ClAliment). J'ai mis un DataView comme source DataSource de mon DataGridView. Et pour rechercher, j'utilise la fonction RowFilter du DataView mais je me perds un peu entre la liste d'object, le DataView et le DataGridView...

Il y a une colonne nom et je veux que l'utilisateur puisse rechercher (filtrer) un aliment par le nom après avoir tapé 3 caractères minimum. Il peut aussi les filtrer par catégories d'aliments grâce à un ComboBox.

Voici mes méthodes de recherches (alc_id_now = la catégorie d'aliments, 0 = toutes les catégories) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
   Private Sub TabRep_TBRechercheAli_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBRechercheAli.TextChanged
 
        If (alc_id_now = 0 And TBRechercheAli.Text.Length > 2) Then
            DVAliment.RowFilter = "ali_nom LIKE '%critere%'".Replace("critere", TBRechercheAli.Text)
        ElseIf (alc_id_now <> 0 And TBRechercheAli.Text.Length > 2) Then
            DVAliment.RowFilter = "ali_fk_alc_id = " & alc_id_now & " AND ali_nom LIKE '%critere%'".Replace("critere", TBRechercheAli.Text)
        ElseIf (alc_id_now = 0 And TBRechercheAli.Text.Length < 3) Then
            DVAliment.RowFilter = "ali_nom LIKE '%critere%'".Replace("critere", "")
            ' comment faire pour qu'il ne fasse pas de requete ??
        Else
            DVAliment.RowFilter = "ali_fk_alc_id = " & alc_id_now & " AND ali_nom LIKE '%critere%'".Replace("critere", TBRechercheAli.Text)
        End If
        TabRep_TBRechercheAli_Display()
    End Sub
 
    Private Sub TabRep_TBRechercheAli_Display()
        listAli.Clear()
        For Each myrow As DataRowView In DVAliment
            Dim ta_deci(27) As Decimal
            ta_deci(0) = myrow.Item("ali_kcal")
            ta_deci(1) = myrow.Item("ali_kj")
            ta_deci(2) = myrow.Item("ali_proteine")
            ta_deci(3) = myrow.Item("ali_lipide")
            ta_deci(4) = myrow.Item("ali_agsat")
            ta_deci(5) = myrow.Item("ali_agmonoinsat")
            ta_deci(6) = myrow.Item("ali_agpolyinsat")
            ta_deci(7) = myrow.Item("ali_aclino")
            ta_deci(8) = myrow.Item("ali_cholesterol")
            ta_deci(9) = myrow.Item("ali_hcdiges")
            ta_deci(10) = myrow.Item("ali_sucre")
            ta_deci(11) = myrow.Item("ali_amidon")
            ta_deci(12) = myrow.Item("ali_fibres")
            ta_deci(13) = myrow.Item("ali_eau")
            ta_deci(14) = myrow.Item("ali_sodium")
            ta_deci(15) = myrow.Item("ali_potassium")
            ta_deci(16) = myrow.Item("ali_calcium")
            ta_deci(17) = myrow.Item("ali_phosphore")
            ta_deci(18) = myrow.Item("ali_magnesium")
            ta_deci(19) = myrow.Item("ali_fer")
            ta_deci(20) = myrow.Item("ali_cuivre")
            ta_deci(21) = myrow.Item("ali_zinc")
            ta_deci(22) = myrow.Item("ali_a")
            ta_deci(23) = myrow.Item("ali_b1")
            ta_deci(24) = myrow.Item("ali_b2")
            ta_deci(25) = myrow.Item("ali_b12")
            ta_deci(26) = myrow.Item("ali_c")
 
            listAli.Add(New ClAliment(myrow.Item("ali_id"), myrow.Item("ali_nom"), ta_deci, myrow.Item("ali_compose"),
                                      LANGUE, myrow.Item("ali_fk_alc_id"), myrow.Item("ali_fk_die_id"), 100))
        Next 'New ClAliment(id, nom, ta_deci, compose, langue, fk_alc, fk_die, quantite)
        TabRep_DGVAliment_DisplayList()
    End Sub
Merci d'avance

Fost