Recherche dans gridView depuis un textbox

Résolu
invent001
Messages postés
19
Date d'inscription
jeudi 19 avril 2012
Statut
Membre
Dernière intervention
27 mai 2012
- 26 avril 2012 à 09:37
invent001
Messages postés
19
Date d'inscription
jeudi 19 avril 2012
Statut
Membre
Dernière intervention
27 mai 2012
- 27 avril 2012 à 17:24
Salut les amis
Alors voilà, j'ai un GridView avec des données dedans, et à l'aide d'une textbox, lorsqu'on rentre quelque chose dedans, le GridView affiche automatiquement les lignes correspondant au critère de recherche

avez-vous des suggestions

merci d'avance

15 réponses

Tupad
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
26 avril 2012 à 14:14
Inclus le div.RowFilter dans ton if.
Si ca ne fonctionne toujours pas, essaie dv.RowFilter =
ShipName like " + SearchExpression + " OR ShipAddress like " + SearchExpression + " OR ShipCountry like " + SearchExpression;
1
Tupad
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
26 avril 2012 à 09:53
Quelques pistes:
- Faire une recherche directement dans la base de données pour afficher les données correspondantes.
- Filtrer les données de ton gridview en testant les valeurs de chacune des cellules.
0
invent001
Messages postés
19
Date d'inscription
jeudi 19 avril 2012
Statut
Membre
Dernière intervention
27 mai 2012

26 avril 2012 à 09:58
tu sais pas comment dois-je me procéder a propos du filtrage car je connais assez

si vous pourriez m'illustrer dans un exemple sa serait génial
0
Tupad
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
26 avril 2012 à 10:45
A faire au postback de la page
public void FilterGridView()
{
foreach(GridViewRow row in this.grid.Rows)
row.Visible = this.GetRowContainsFilter(row);
}

private bool GetRowContainsFilter(GridViewRow row)
{
foreach(GridViewCell cell in row.Cells)
{
if(cell.Value.Contains(this.tbFilter.Text))
return true;
}
return false
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
invent001
Messages postés
19
Date d'inscription
jeudi 19 avril 2012
Statut
Membre
Dernière intervention
27 mai 2012

26 avril 2012 à 12:28
je travaille avc vb.net,il m'affiche des erreurs
ce que j'ai pu faire jusqu'a maintenant:
  Private Sub SearchText()
        Dim value As String
        Dim dt As DataTable = recuperer()
        Dim dv As DataView = New DataView(dt)
        Dim SearchExpression As String = Nothing
        If Not String.IsNullOrEmpty(txtRecherche.Text) Then
            SearchExpression = String.Format("{0} '%{1}%'", GridView1.SortExpression, txtRecherche.Text)
        End If
        dv.RowFilter = ("ShipAddress like" + SearchExpression)
        GridView1.DataSource = dv
        GridView1.DataBind()

 Private Function recuperer() As DataTable
        Dim conn As SqlConnection = New SqlConnection("Data Source=MOUAD\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True")
        conn.Open()
        Dim cmd As SqlCommand = New SqlCommand
        cmd.Connection = conn
        cmd.CommandText = "select orderID,ShipName,ShipAddress,ShipCountry from Orders"
        Dim dAdapter As SqlDataAdapter = New SqlDataAdapter
        dAdapter.SelectCommand = cmd
        Dim objDs As DataSet = New DataSet
        dAdapter.Fill(objDs)
        Return objDs.Tables(0)
    End Function

ce code permet de rechercher selon un seul critère spécifié dans les dv.RowFilter:
dv.RowFilter = ("ShipAddress like" + SearchExpression)

je voudrais au lieu de lister des colonnes
faire une valeur qui me premettant des chercher sur tous les les lignes de la gridview correspondant au critère spécifié dans txtRecherche.text
autre point:
tester sur la valeur si elle est de type integer la convertir en integer et parcourir la colonne des int
laisser de côté si elle est de type string

merci d'avance
0
Tupad
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
26 avril 2012 à 12:38
Pourquoi, dans le select de ta fonction recuperer(), tu n'ajoutes pas une clause 'where' contenant les colonnes sur lesquelles tu veux filtrer tes données?
0
invent001
Messages postés
19
Date d'inscription
jeudi 19 avril 2012
Statut
Membre
Dernière intervention
27 mai 2012

26 avril 2012 à 12:46
c que je ne voulais pas faire dès le début
parce que l'application sera réutilisée par n'importe quel base de données et on ne peut a chaque fois changer les paramètres

tu te dirais qu'il faut même changer la requête
j'agirais avc ma commande t'en fais pas

n'as tu pas d'autres solutions??
0
Tupad
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
26 avril 2012 à 12:55
Alors essaie dv.RowFilter =
string.Format("ShipName like {0} OR ShipAddress like {0} OR ShipCountry like {0}", SearchExpression);
0
invent001
Messages postés
19
Date d'inscription
jeudi 19 avril 2012
Statut
Membre
Dernière intervention
27 mai 2012

26 avril 2012 à 13:27
message d'erreur

L'index (de base zéro) doit être supérieur ou égal à zéro et inférieur à la taille de la liste des arguments.

j'ai pas compris
0
Tupad
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
26 avril 2012 à 13:53
L'erreur vient du rowfilter ou du string.format?
0
invent001
Messages postés
19
Date d'inscription
jeudi 19 avril 2012
Statut
Membre
Dernière intervention
27 mai 2012

26 avril 2012 à 13:59
vient du string.format;

System.FormatException: L'index (de base zéro) doit être supérieur ou égal à zéro et inférieur à la taille de la liste des arguments.
0
invent001
Messages postés
19
Date d'inscription
jeudi 19 avril 2012
Statut
Membre
Dernière intervention
27 mai 2012

26 avril 2012 à 16:05
Merci la deuxième a fonctionné.
sinn Tupad tu n'arrive pas a trouvé ce que je te disais tte à l'heure concernant la valeur; de ne pas refaire les columns à chaque fois que je change de base_de_Donnée,je voudrais qu'ils soient génériques c-à-d:au moment ou je remplace un base par une autre les colonnes se regénère automatiquement
0
Tupad
Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
27 avril 2012 à 08:52
Tu peux générer tes colonnes automatiquement en fonction de ta requête mais tu devras toujours renseigner quelque part cette requête.
Ou alors tu joues avec de l'héritage ou de l'injection de dépendance dans un user control, pour avoir une interface globale et l'adapter à un ou des besoins plus spécifiques.
0
invent001
Messages postés
19
Date d'inscription
jeudi 19 avril 2012
Statut
Membre
Dernière intervention
27 mai 2012

27 avril 2012 à 11:58
l'injection de dépendance dans un user control

j'ai du mal à comprendre cette phrase
0
invent001
Messages postés
19
Date d'inscription
jeudi 19 avril 2012
Statut
Membre
Dernière intervention
27 mai 2012

27 avril 2012 à 17:24
Private Sub SearchText()
        Dim value As String
        Dim dt As DataTable = recuperer()
        Dim dv As DataView = New DataView(dt)
        Dim SearchExpression As String = Nothing
        If Not String.IsNullOrEmpty(txtRecherche.Text) Then
            SearchExpression = String.Format("{0} '%{1}%'", GridView1.SortExpression, txtRecherche.Text)
        End If
        dv.RowFilter = ("ShipAddress like" + SearchExpression)
        GridView1.DataSource = dv
        GridView1.DataBind()


je mets à la place des colums du rowfilter :
dv.RowFilter = dt.DataSet.Tables(0).Columns("ShipName").ColumnName & "like" & SearchExpression & dt.DataSet.Tables(0).Columns("ShipAddress").ColumnName & "like" & SearchExpression & dt.DataSet.Tables(0).Columns("ShipCountry").ColumnName & "like" & SearchExpression


et lorsque je tape sur rechercher il m'affiche ce message :

Erreur de syntaxe : opérande manquant après l'opérateur ''%champ_saisi_dans-le_txtRecherche.text%''.
0