Recherche dans gridView depuis un textbox [Résolu]

invent001 19 Messages postés jeudi 19 avril 2012Date d'inscription 27 mai 2012 Dernière intervention - 26 avril 2012 à 09:37 - Dernière réponse : invent001 19 Messages postés jeudi 19 avril 2012Date d'inscription 27 mai 2012 Dernière intervention
- 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
Afficher la suite 

15 réponses

Répondre au sujet
Tupad 239 Messages postés lundi 5 décembre 2005Date d'inscription 27 août 2012 Dernière intervention - 26 avril 2012 à 14:14
+1
Utile
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;
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Tupad
Tupad 239 Messages postés lundi 5 décembre 2005Date d'inscription 27 août 2012 Dernière intervention - 26 avril 2012 à 09:53
0
Utile
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.
Commenter la réponse de Tupad
invent001 19 Messages postés jeudi 19 avril 2012Date d'inscription 27 mai 2012 Dernière intervention - 26 avril 2012 à 09:58
0
Utile
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
Commenter la réponse de invent001
Tupad 239 Messages postés lundi 5 décembre 2005Date d'inscription 27 août 2012 Dernière intervention - 26 avril 2012 à 10:45
0
Utile
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
}
Commenter la réponse de Tupad
invent001 19 Messages postés jeudi 19 avril 2012Date d'inscription 27 mai 2012 Dernière intervention - 26 avril 2012 à 12:28
0
Utile
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
Commenter la réponse de invent001
Tupad 239 Messages postés lundi 5 décembre 2005Date d'inscription 27 août 2012 Dernière intervention - 26 avril 2012 à 12:38
0
Utile
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?
Commenter la réponse de Tupad
invent001 19 Messages postés jeudi 19 avril 2012Date d'inscription 27 mai 2012 Dernière intervention - 26 avril 2012 à 12:46
0
Utile
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??
Commenter la réponse de invent001
Tupad 239 Messages postés lundi 5 décembre 2005Date d'inscription 27 août 2012 Dernière intervention - 26 avril 2012 à 12:55
0
Utile
Alors essaie dv.RowFilter =
string.Format("ShipName like {0} OR ShipAddress like {0} OR ShipCountry like {0}", SearchExpression);
Commenter la réponse de Tupad
invent001 19 Messages postés jeudi 19 avril 2012Date d'inscription 27 mai 2012 Dernière intervention - 26 avril 2012 à 13:27
0
Utile
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
Commenter la réponse de invent001
Tupad 239 Messages postés lundi 5 décembre 2005Date d'inscription 27 août 2012 Dernière intervention - 26 avril 2012 à 13:53
0
Utile
L'erreur vient du rowfilter ou du string.format?
Commenter la réponse de Tupad
invent001 19 Messages postés jeudi 19 avril 2012Date d'inscription 27 mai 2012 Dernière intervention - 26 avril 2012 à 13:59
0
Utile
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.
Commenter la réponse de invent001
invent001 19 Messages postés jeudi 19 avril 2012Date d'inscription 27 mai 2012 Dernière intervention - 26 avril 2012 à 16:05
0
Utile
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
Commenter la réponse de invent001
Tupad 239 Messages postés lundi 5 décembre 2005Date d'inscription 27 août 2012 Dernière intervention - 27 avril 2012 à 08:52
0
Utile
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.
Commenter la réponse de Tupad
invent001 19 Messages postés jeudi 19 avril 2012Date d'inscription 27 mai 2012 Dernière intervention - 27 avril 2012 à 11:58
0
Utile
l'injection de dépendance dans un user control

j'ai du mal à comprendre cette phrase
Commenter la réponse de invent001
invent001 19 Messages postés jeudi 19 avril 2012Date d'inscription 27 mai 2012 Dernière intervention - 27 avril 2012 à 17:24
0
Utile
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%''.
Commenter la réponse de invent001

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.