Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Filtrer un sqldatasource

19 réponses
Avatar
Faust
salut,

encore peut-être un cas d'école

j'ai un gridview rattaché à un sqldatasource, jusque là pas de problème

maintenant j'aimerais pouvoir filtrer ce sqldatasource

déjà là j'ai une question, est-ce qu'il vaut mieux modifier
dynamiquement la requête sql ou est-ce que la propriété
FilterExpression est suffisament performante pour s'éviter cette
gymnastique ?

ensuite, je voudrais faire un formulaire de filtre à base de
drowdownbox contenant les différentes valeurs connues du champ qu'ils
permettent de filtrer

là est donc la deuxième question, comme les données principales
viennent d'un sqldatasource, est-ce qu'il est possible d'utiliser ce
même sqldatasource pour populer les dropdownbox ? si oui, comment gerer
le "distinct" et le cas "ne pas activer le filtre de ce dropdownbox" ?

et sinon, plus généralement, est-ce qu'il existe un composant magique
de filtrage qu'on associerait à un gridview (par exemple, ou
directement au datasource) et qui serait capable d'afficher une serie
de dropdownbox/textbox (en fonction d'un paramétrage façon collection)
avec auto-populate de ces composants ?

--
Faust
"Une âme en peine peut en cacher une autre"

10 réponses

1 2
Avatar
Jérémy Jeanson
Comme tu es sur .net 3.5 il serrait peut être plus simple pour toi
d'utiliser Linq To SQL ou Entity Framework pour gerrer tes donneés
(c'est tellement plus simple qu'un DataSet)

En plus ces deux technologies sont très proches du fait de l'emploi de
Linq et l'usage de leurs controls être très ludique pour un débutant.

je te conseil vivement d'aller sur le blog de Scott Guthrie

http://weblogs.asp.net/scottgu

Il contient de nombreux exemples et leur explication est des plus
simple. Même si tu n'aimes pas l'anglais il y a de nombreuses captures
d'écran qui devraient te permettre de t'y retrouver.
--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net
Avatar
Faust
/_Jérémy Jeanson_ a pensé très fort/ :
Comme tu es sur .net 3.5 il serrait peut être plus simple pour toi d'utiliser
Linq To SQL ou Entity Framework pour gerrer tes donneés (c'est tellement plus
simple qu'un DataSet)



En plus ces deux technologies sont très proches du fait de l'emploi de Linq
et l'usage de leurs controls être très ludique pour un débutant.



je te conseil vivement d'aller sur le blog de Scott Guthrie



http://weblogs.asp.net/scottgu



Il contient de nombreux exemples et leur explication est des plus simple.
Même si tu n'aimes pas l'anglais il y a de nombreuses captures d'écran qui
devraient te permettre de t'y retrouver.



merci beaucoup, je vais aller voir ça de ce pas (t'en fais pas,
l'anglais est de loin le cadet de mes soucis)

effectivement, j'avais songé à l'option Link mais comme je débute avec
asp.net, je me suis dit que commencer par les bases c'était mieux ;)

--
Faust
"Une âme en peine peut en cacher une autre"
Avatar
Faust
en fait, j'avais oublié le petit détail qui fache: je travaille avec
firebird, et le seul support linq<>firebird qui existe c'est au travers
d'ado
ce qui me ferait rajouter une couche, dont je me passerais bien pour le
moment tant que je ne maitrise pas un minimum asp.net :)

/_Faust_ a exprimé avec précision/ :
/_Jérémy Jeanson_ a pensé très fort/ :
merci beaucoup, je vais aller voir ça de ce pas (t'en fais pas, l'anglais est
de loin le cadet de mes soucis)



effectivement, j'avais songé à l'option Link mais comme je débute avec
asp.net, je me suis dit que commencer par les bases c'était mieux ;)



--
Faust
"Une âme en peine peut en cacher une autre"
Avatar
Jérémy Jeanson
Welcome in the merveilleux monde d'entity framework alors...

Entity a un certain nombre de providers de bases de données, en faisait
un test avec FireBird tu devrais peut être trouver ton bonheur...

Perso je n'ai pas ce genre de SGBD donc je ne peux pas tester ni confirmer.
--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net
Avatar
Christophe Lephay
"Faust" a écrit dans le message de groupe de
discussion :
salut,

encore peut-être un cas d'école

j'ai un gridview rattaché à un sqldatasource, jusque là pas de problème

maintenant j'aimerais pouvoir filtrer ce sqldatasource

déjà là j'ai une question, est-ce qu'il vaut mieux modifier dynamiquement
la requête sql ou est-ce que la propriété FilterExpression est suffisament
performante pour s'éviter cette gymnastique ?

ensuite, je voudrais faire un formulaire de filtre à base de drowdownbox
contenant les différentes valeurs connues du champ qu'ils permettent de
filtrer

là est donc la deuxième question, comme les données principales viennent
d'un sqldatasource, est-ce qu'il est possible d'utiliser ce même
sqldatasource pour populer les dropdownbox ? si oui, comment gerer le
"distinct" et le cas "ne pas activer le filtre de ce dropdownbox" ?

et sinon, plus généralement, est-ce qu'il existe un composant magique de
filtrage qu'on associerait à un gridview (par exemple, ou directement au
datasource) et qui serait capable d'afficher une serie de
dropdownbox/textbox (en fonction d'un paramétrage façon collection) avec
auto-populate de ces composants ?



Imaginons que tu aies une listbox avec les valeurs sur lesquelles tu veux
pouvoir appliquer un filtre à un champ de ta table qui s'appellerait "Data",
et une première ligne de cette listbox avec le texte "Aucun filtre".

Tu peux exprimer ton filtre, que ce soit en FilterExpression *comme* dans ta
requête sql comme suit :

select ... where Data = @Filter or @Filter = 'Aucun filtre'

Tu bind le paramètre @Filter à ta listbox.

Tu peux bien entendu appliquer simultanément plusieurs filtres :

select ... where (Data1 = @Filter1 or @Filter1 = 'Aucun filtre') and (Data2
= @Filter2 or @Filter2 = 'Aucun filtre') and ...

C'est un exemple avec des expressions de type chaine de caractère,
transposer à d'autres type est trivial et je doute pas que tu y arriveras
tout seul.

PS : de mémoire, le @ n'est pas utile si tu fais le filtre dans
FilterExpression.
Avatar
Faust
salut,

merci pour la réponse
effectivement c'est une solution, peut être pas très performante point
de vue interrogation de la base, mais effectivement, je vais voir ce
que je peux en faire

par contre, tu n'as pas une idée sur la méthode que je pourrais
utiliser pour l'autre partie de mon problème ?

/_Christophe Lephay_ a exposé/ :
"Faust" a écrit dans le message de groupe de
discussion :
salut,

encore peut-être un cas d'école

j'ai un gridview rattaché à un sqldatasource, jusque là pas de problème

maintenant j'aimerais pouvoir filtrer ce sqldatasource

déjà là j'ai une question, est-ce qu'il vaut mieux modifier dynamiquement
la requête sql ou est-ce que la propriété FilterExpression est suffisament
performante pour s'éviter cette gymnastique ?

ensuite, je voudrais faire un formulaire de filtre à base de drowdownbox
contenant les différentes valeurs connues du champ qu'ils permettent de
filtrer

là est donc la deuxième question, comme les données principales viennent
d'un sqldatasource, est-ce qu'il est possible d'utiliser ce même
sqldatasource pour populer les dropdownbox ? si oui, comment gerer le
"distinct" et le cas "ne pas activer le filtre de ce dropdownbox" ?

et sinon, plus généralement, est-ce qu'il existe un composant magique de
filtrage qu'on associerait à un gridview (par exemple, ou directement au
datasource) et qui serait capable d'afficher une serie de
dropdownbox/textbox (en fonction d'un paramétrage façon collection) avec
auto-populate de ces composants ?





Imaginons que tu aies une listbox avec les valeurs sur lesquelles tu veux
pouvoir appliquer un filtre à un champ de ta table qui s'appellerait "Data",
et une première ligne de cette listbox avec le texte "Aucun filtre".



Tu peux exprimer ton filtre, que ce soit en FilterExpression *comme* dans ta
requête sql comme suit :



select ... where Data = @Filter or @Filter = 'Aucun filtre'



Tu bind le paramètre @Filter à ta listbox.



Tu peux bien entendu appliquer simultanément plusieurs filtres :



select ... where (Data1 = @Filter1 or @Filter1 = 'Aucun filtre') and (Data2 =
@Filter2 or @Filter2 = 'Aucun filtre') and ...



C'est un exemple avec des expressions de type chaine de caractère, transposer
à d'autres type est trivial et je doute pas que tu y arriveras tout seul.



PS : de mémoire, le @ n'est pas utile si tu fais le filtre dans
FilterExpression.



--
Faust
"Une âme en peine peut en cacher une autre"
Avatar
Christophe Lephay
"Faust" a écrit dans le message de groupe de
discussion :
salut,

merci pour la réponse
effectivement c'est une solution, peut être pas très performante point de
vue interrogation de la base, mais effectivement, je vais voir ce que je
peux en faire



Tu peux avoir un problème de performance si tu appliques le filtre dans
FilterExpression, mais dans l'exemple que j'ai donné, c'est la requête sql
elle-même qui est modifiée par les mécanismes de binding d'asp, ce qui fait
que le filtre est appliqué par le serveur sql.


par contre, tu n'as pas une idée sur la méthode que je pourrais utiliser
pour l'autre partie de mon problème ?



Par définition, tes listes avec les valeurs de filtre possibles ne peut pas
se baser sur la même requête (soit parce qu'elle va appliquer un distinct,
soit parce que tu vas jouer avec des ID derrière), et il lui faut donc son
propre datasource.

PS : essaie de répondre plutôt en fin de message, ça devient vite confus au
bout de quelques échanges sinon.

/_Christophe Lephay_ a exposé/ :
"Faust" a écrit dans le message de groupe de
discussion :
salut,

encore peut-être un cas d'école

j'ai un gridview rattaché à un sqldatasource, jusque là pas de problème

maintenant j'aimerais pouvoir filtrer ce sqldatasource

déjà là j'ai une question, est-ce qu'il vaut mieux modifier
dynamiquement la requête sql ou est-ce que la propriété FilterExpression
est suffisament performante pour s'éviter cette gymnastique ?

ensuite, je voudrais faire un formulaire de filtre à base de drowdownbox
contenant les différentes valeurs connues du champ qu'ils permettent de
filtrer

là est donc la deuxième question, comme les données principales viennent
d'un sqldatasource, est-ce qu'il est possible d'utiliser ce même
sqldatasource pour populer les dropdownbox ? si oui, comment gerer le
"distinct" et le cas "ne pas activer le filtre de ce dropdownbox" ?

et sinon, plus généralement, est-ce qu'il existe un composant magique de
filtrage qu'on associerait à un gridview (par exemple, ou directement au
datasource) et qui serait capable d'afficher une serie de
dropdownbox/textbox (en fonction d'un paramétrage façon collection) avec
auto-populate de ces composants ?





Imaginons que tu aies une listbox avec les valeurs sur lesquelles tu veux
pouvoir appliquer un filtre à un champ de ta table qui s'appellerait
"Data", et une première ligne de cette listbox avec le texte "Aucun
filtre".



Tu peux exprimer ton filtre, que ce soit en FilterExpression *comme* dans
ta requête sql comme suit :



select ... where Data = @Filter or @Filter = 'Aucun filtre'



Tu bind le paramètre @Filter à ta listbox.



Tu peux bien entendu appliquer simultanément plusieurs filtres :



select ... where (Data1 = @Filter1 or @Filter1 = 'Aucun filtre') and
(Data2 = @Filter2 or @Filter2 = 'Aucun filtre') and ...



C'est un exemple avec des expressions de type chaine de caractère,
transposer à d'autres type est trivial et je doute pas que tu y arriveras
tout seul.



PS : de mémoire, le @ n'est pas utile si tu fais le filtre dans
FilterExpression.



--
Faust
"Une âme en peine peut en cacher une autre"




Avatar
Faust
/_Christophe Lephay_ a pensé très fort/ :
"Faust" a écrit dans le message de groupe de
discussion :
salut,

merci pour la réponse
effectivement c'est une solution, peut être pas très performante point de
vue interrogation de la base, mais effectivement, je vais voir ce que je
peux en faire





Tu peux avoir un problème de performance si tu appliques le filtre dans
FilterExpression, mais dans l'exemple que j'ai donné, c'est la requête sql
elle-même qui est modifiée par les mécanismes de binding d'asp, ce qui fait
que le filtre est appliqué par le serveur sql.



justement, le serveur que j'utilise (FB) n'aime pas trop ce genre de
jonglage avec les paramètres

par contre, tu n'as pas une idée sur la méthode que je pourrais utiliser
pour l'autre partie de mon problème ?





Par définition, tes listes avec les valeurs de filtre possibles ne peut pas
se baser sur la même requête (soit parce qu'elle va appliquer un distinct,
soit parce que tu vas jouer avec des ID derrière), et il lui faut donc son
propre datasource.



ok
je pensais qu'eventuellement une requete LINQ aurait pu m'aider mais il
semble pas possible de prendre un sqldatasource comme from dans une
telle requete

--
Faust
"Une âme en peine peut en cacher une autre"
Avatar
Christophe Lephay
"Faust" a écrit dans le message de groupe de
discussion :
/_Christophe Lephay_ a pensé très fort/ :
"Faust" a écrit dans le message de groupe de
discussion :
salut,

merci pour la réponse
effectivement c'est une solution, peut être pas très performante point
de vue interrogation de la base, mais effectivement, je vais voir ce que
je peux en faire





Tu peux avoir un problème de performance si tu appliques le filtre dans
FilterExpression, mais dans l'exemple que j'ai donné, c'est la requête
sql elle-même qui est modifiée par les mécanismes de binding d'asp, ce
qui fait que le filtre est appliqué par le serveur sql.



justement, le serveur que j'utilise (FB) n'aime pas trop ce genre de
jonglage avec les paramètres



Les expressions @Filter du code que j'avais donné en exemple ne sont pas
transmises telles quelles au serveur. Asp leur substitue leur valeur réelle.

Il ne s'agissait pas de transmettre des paramètres à une procédure stockée.
Avatar
Faust
/_Christophe Lephay_ a exposé/ :
"Faust" a écrit dans le message de groupe de
discussion :
/_Christophe Lephay_ a pensé très fort/ :
"Faust" a écrit dans le message de groupe de
discussion :
salut,

merci pour la réponse
effectivement c'est une solution, peut être pas très performante point de
vue interrogation de la base, mais effectivement, je vais voir ce que je
peux en faire





Tu peux avoir un problème de performance si tu appliques le filtre dans
FilterExpression, mais dans l'exemple que j'ai donné, c'est la requête sql
elle-même qui est modifiée par les mécanismes de binding d'asp, ce qui
fait que le filtre est appliqué par le serveur sql.



justement, le serveur que j'utilise (FB) n'aime pas trop ce genre de
jonglage avec les paramètres





Les expressions @Filter du code que j'avais donné en exemple ne sont pas
transmises telles quelles au serveur. Asp leur substitue leur valeur réelle.



Il ne s'agissait pas de transmettre des paramètres à une procédure stockée.



d'accord
dans ce cas, ça pourrait marcher
merci

--
Faust
"Une âme en peine peut en cacher une autre"
1 2