2009-06-19 7 views
0

J'ai une zone de texte et une vue de grille. Le gridview est rempli en fonction de la valeur entrée dans la zone de texte. Supposons que j'entre un nom dans la zone de texte. Lorsque je tape le nom dans la zone de texte, les résultats dans la grille doivent changer dynamiquement. Par exemple, si j'entre John dans la zone de texte, après avoir entré Jo, la grille devrait remplir les résultats qui commencent par Jo et si j'entre h, la grille devrait remplir les résultats avec Joh et ainsi de suite. S'il vous plaît me suggérer une solution (en C#) pour cela. Merci d'avance.Modification dynamique de la grille en fonction de la saisie de la valeur dans une zone de texte

+0

Quelle est la source de données de votre grille? – AlexDrenea

Répondre

0

Vous devez gérer l'événement text changed de votre txtBox. Et rebind la grille de données avec les données correspondant à la zone de texte

private void txtBox_TextChanged(object sender, EventArgs e) 
{ 
    string strValue = this.txtBox.Text; 
    DataSet ds = ... // Get the dataset that matches strValue 
    this.dgrid.DataSource = ds; 
} 

Cependant, ce rechargeant après chaque DataGrid l'utilisateur tape lettre, serait une opération très coûteuse. Je suggère de fournir un bouton de rechargement après que l'utilisateur a fini d'entrer le texte.

0

Si vos données ne sont pas très fréquemment modifiées (comme de nombreux changements lorsque l'utilisateur est sur le formulaire ou la page), vous pouvez obtenir toutes les données et les mettre en cache dans votre propre. Ensuite, vous filtrez simplement cet ensemble de données en fonction de la valeur entrée dans la zone de texte:

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     if (tb.Text == "") 
     { 
      //Unfilter the data 
      gv.DataSource = dtb; 
      return; 
     } 
     //Get default view of your data table and filter 
     DataView dv = dtb.DefaultView; 

     //Suppose your column name is "Value" 
     dv.RowFilter = "Value like '" + tb.Text + "%'"; 

     gv.DataSource = dv; 
    } 

Mais ne pensez-vous pas filtrer Une grande quantité de données à chaque pression de touche est lourd. Vous le faites au foyer perdu (flou) de la zone de texte ou lorsque l'utilisateur appuie sur la touche Entrée. Juste mes pensées ...

Questions connexes