2010-11-12 5 views

Répondre

4

L'astuce est ici pour faire DataBind que lorsque le changement de texte sur la zone de recherche, mais vous devez toujours définir le code de commande de sélection de source de données. Il faut donc ajouter une zone de texte et un bouton dire, soumettre, et vous avez les éléments suivants:

OnPageLoad -> 
if(SearchContron.Text.Length > 0) 
    SqlDataSource1.SelectCommand = "SELECT * FROM TABLE WHERE Desc LIKE N'%" + SearchContron.Text +"%'" 
else 
    SqlDataSource1.SelectCommand = "SELECT * FROM TABLE " 

et

OnSubmitButtonClick -> GridView.DataBind() 

Si vous le faites autrement, la pagination et l'édition et d'autres commandes va échouer. Vous pouvez également le rendre plus avancé si vous obtenez le texte de la boîte de texte et le cassez en plusieurs mots et recherchez chacun séparément dans la même commande sql.

+0

Merci pour votre réponse. Toute autre façon pour que je puisse éviter le contrôle des boutons. Je veux utiliser uniquement un textbox. Tout gestionnaire d'événement qui est utilisé avec une zone de texte itslef ??. J'ai vu dans un forum que cela peut être fait en utilisant un certain contrôle Ajax. Peux-tu m'aider. Je ne suis qu'un débutant. –

+0

@Pavan d'abord le créer avec le bouton, faire vos tests, puis vous pouvez ajouter cacher le contrôle avec css, et le faire automatiquement cliquer avec javascript lorsque vous tapez dans le texte. Mais d'abord, il est facile de travailler ... – Aristos

+0

Ouais, à droite. Merci pour votre réponse mon pote .. :). Je vais d'abord essayer. –

2

Son simple,

Regardez here pour un tutoriel de base sur l'ajout d'un contrôle Ajax à la page. 1) Ajouter la zone de texte ainsi que la vue de grille dans le même panneau de mise à jour 2) Dans l'événement de pression de touche de la zone de texte, vous pouvez définir la source de données de gird et invoquer la commande databind.

Notez que lorsque vous appuyez sur la touche, le cycle de vie complet de la page sera exécuté côté serveur. Par conséquent, vous devrez vérifier si le post-retour est asynchrone ou non dans votre chargement de page même gestionnaire. Une astuce pour réduire le nombre de requêtes de base de données envoyées est de définir un temporisateur lorsque l'utilisateur appuie sur une touche avec un délai de 500 ms et effectue la liaison de données de gridview dans l'événement tick de timer. Si vous faites cela, la base de données ne sera interrogée que si l'utilisateur a cessé de taper quelque chose.

Merci,
Vamyip

+0

Merci de votre temps et de votre considération. Je vais essayer les deux solutions ci-dessus. Et merci pour le lien. –

0

Sauf si vous avez un besoin spécifique de le faire sur le serveur, pourquoi ne pas effectuer le filtrage sur le client? Une solution comme DataTables est rapide et conviviale.

0

Si vous optez pour une autre méthode de recherche de conditions de filtrage pour la partie en-tête de la vue de grille. il est facile d'utiliser l'outil dans votre code. Ce sont des concepts utilisés sans base de données mais j'utilisais la table de données dans linq. j'espère utiliser ce code complet.

DataTable dt = (DataTable)Session["ProductTable"]; 
var query = from t in dt.AsEnumerable() 
      where t.Field<string>("ProducId").StartsWith(txtProductId.Text.ToString().Trim()) 
      || t.Field<string>("ProducId").Contains(txtProductId.Text.ToString().Trim()) 
      select t; 

Voici un sample program.

2

enter image description here

enter image description here

Pour lier les données GridView écrire le code suivant

private void GridData() 
    { 
     string conString = ConfigurationManager.ConnectionStrings["MyCon"].ToString(); 
     SqlConnection sqlcon = new SqlConnection(conString); 
     SqlCommand sqlcmd; 
     SqlDataAdapter da; 
     DataTable dt = new DataTable(); 
     String query; 

     if (txtsearch.Text == "") 
     { 
      query = "select PersonID,LastName,FirstName from Person"; 
     } 
     else 
     { 
      query = "select PersonID,LastName,FirstName from Person where PersonID like '" + txtsearch.Text + "%' or LastName like '" + txtsearch.Text + "%' or FirstName like '" + txtsearch.Text + "%'"; 
     } 
     sqlcmd = new SqlCommand(query, sqlcon); 
     sqlcon.Open(); 
     da = new SqlDataAdapter(sqlcmd); 
     dt.Clear(); 
     da.Fill(dt); 
     if (dt.Rows.Count > 0) 
     { 
      grdsearch.DataSource = dt; 
      grdsearch.DataBind(); 
     } 
     else 
     { 
      grdsearch.DataBind(); 
      Label1.Text = "No Records Found"; 
     } 
     sqlcon.Close(); 
    } 

En cas de chargement de la page

if (!IsPostBack) 
     { 
      GridData(); 
     } 

pour le bouton de recherche, cliquez événement appeler la méthode gridData() et pour cl bouton oreille clic événement écrire code suivant

 txtsearch.Text = ""; 
     GridData(); 
     Label1.Text = ""; 
Questions connexes