2011-02-26 1 views
0

Je voudrais faire une recherche qui remplit le résultat à un Gridview avec LINQ.problème avec la recherche semi-automatique avec linq et datagrid

Ce code avant utilisé Linq qui fonctionne très bien:

foreach (DataRow dr in dt.Select("Name like '" + txtSearch.Text + "%'")) 
     { 
      dtable.ImportRow(dr); 
     } 

Dans mon code LINQ, je bsUser comme BindingSource.

private void txtSearch_TextChanged(object sender, EventArgs e) 
    { 

     string input = txtSearch.Text.Trim().ToLower(); 
     if (input.Length <= 0) return; 

     IList<User> u = (bsUser.Filter? select? 
         .Where(x => (x.Name.ToLower().StartsWith(input) 
         && (x.RoleId == (int)cbRole.SelectedValue))).ToList()); 

     bsUser.DataSource = u;    

    } 

Le problème que j'ai, si le u renvoie 0 lignes, puis mon Gridview qui lié à la bsUser n'aura plus de données. datasource.count() = 0

Quelqu'un pourrait me donner une solution de contournement ou un conseil sur la façon dont je pourrais aborder cela?

+0

Veuillez confirmer? Vous ne souhaitez pas que la grille se mette à jour lorsque la requête de recherche renvoie AUCUN résultat? – gideon

+0

Je veux que la grille apparaisse vide si la requête ne renvoie AUCUN résultat. – VeecoTech

Répondre

0

salut je pense que je l'ai fait en utilisant de cette façon. Cela semble bon ..

private void txtSearch_TextChanged(object sender, EventArgs e) 
    { 
     string input = txtSearch.Text.Trim().ToLower(); 
     if (input.Length > 0) 
      bsUser.Filter = "Name like '" + input + "%' AND RoleId = '" + (int)cbRoleSearch.SelectedValue + "'"; 
     else 
      FilterCBRoleSearch(Convert.ToInt16(cbRoleSearch.SelectedValue)); 
    } 
+0

ok, bizarre .. je ne peux que faire le bindingSource Filter s'il est borné avec datatable. Il ne peut pas filtrer si je le lie avec tolist(). Je suis d'accord que ça lie avec datatable, mais j'ai du mal à obtenir le databoundItem sur l'événement MouseUp() quand je clique sur la ligne gridview. 'tuteur = (Utilisateur) gvTutor.SelectedRows [0] .DataBoundItem;' Cette ligne a échoué si ma grille est bornée avec datatable. le dataBoundItem fonctionne bien dans Tolist() – VeecoTech