Avis sur conception de page ASP.NET/VB

Résolu
cs_Djodu69 Messages postés 43 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 29 avril 2010 - 21 juil. 2008 à 14:54
cs_Djodu69 Messages postés 43 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 29 avril 2010 - 24 juil. 2008 à 08:50
Bonjour,

Je dois actuellement recréer une application en asp.net(vb) qui était auparavant basé sur access. Je suis débutant dans ce langage et j'aimerai avoir votre avis sur les outils à utiliser.
L'application repose en grande partie sur l'affichage de tables avec la possibilité de filtrer les données selon des champs.

ex capture d'écran : http://www2.partage-facile.com/1052144-refcommande.JPG.html

Ainsi en saisissant un fournisseur, en modifiant les dates on obtient donc une série de filtres qui affiche que selon ce qu'on désire.
A noter que la petite loupe renvoi vers un état imprimable de la commande.

Est-il possible de faire ceci en asp.net ? Je pensais utiliser un gridview, mais je ne sais pas comment gérer les filtres ? Comment faire pour créer des etats imprimables ?

Merci par avance.

25 réponses

ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
22 juil. 2008 à 15:11
As tu testée ta requête pour savoir si elle fonctionne ?
Pour avoir un mélange entre les deux options il te suffit de magouiller : tu fait une fois l'un une fois l'autre et tu mélange le tout.
Sinon si ta requete fonctionne en dehors du SqlDataSource modifie juste les type : string pour fournisseur et libelle et datetime pour date_deb et date_fin (enfin ça c'est selon la construction de ta table).

Mais je rest d'avis que le mieux est de creer une procédure stockee

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
3
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
21 juil. 2008 à 16:29
Salut,

Ta question est très vaste !
Le Gridview est une bonne idée pour afficher tes données. Pour gérer les filtres il te suffit d'utiliser plusieurs champs permettant à l'utilisateur de faire ses choix, et lors d'un clic sur un bouton de validation il faut vérifier que les champs sont bien remplis et choisir ainsi une requete selon eux.


Si ce n'est pas très clair (ça serait compréhensible) demande des détails suplémentaires.


Bon courage





<hr />


Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres pers
0
cs_Djodu69 Messages postés 43 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 29 avril 2010
22 juil. 2008 à 08:29
Merci d'avoir répondu à ma question.
Je veux bien plus de précisions sur ta solution. Un exemple si tu as ?
De plus sais tu comment je peux faire pour que l'utilisateur en cliquant sur la loupe est un état imprimable ? Je pensais a crystal report, mais jamais utilisé..

Merci par avance :)
0
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
22 juil. 2008 à 09:37
<hr />
Salut,

Je t'ai fait un exemple simple avec des champs pour ton filtre, un gridview et des sources de données (j'ais pris une source SqlServer mais à toi de modifier). Cet exemple ne propose que deux choix : une recherche filtrée et une sans filtre, mais après tu peux decider de faire les verifs nécessaire pour n'utiliser qu'une partie du filtre si le reste n'est pas rempli, le mieux pour ça serait de garder les sources comme elles sont mais de faire une procédure stockée (à voir dans un prochain épisode).
<hr />
Pour les champs du filtre des TextBox et un bouton de validation :
<

asp:Label
ID="Label1"
runat="server"
Text="Fournisseur"></asp:Label>

<asp:TextBox
ID="TextBoxFournisseur"
runat="server"></asp:TextBox>

<asp:Label
ID="Label2"
runat="server"
Text="Date entre"></asp:Label>

<asp:TextBox
ID="TextBoxDateDeb"
runat="server"></asp:TextBox>

<asp:Label
ID="Label3"
runat="server"
Text="et"></asp:Label>

<asp:TextBox
ID="TextBoxDateFin"
runat="server"></asp:TextBox>

<asp:Label
ID="Label4"
runat="server"
Text="Libelle"></asp:Label>

<asp:TextBox
ID="TextBoxLibelle"
runat="server"></asp:TextBox>

<asp:Button
ID="ButtonFiltre"
runat="server"
Text="Filtrer"
onclick="ButtonFiltre_Click"
/>
Un GridView basique mais invisible pour l'instant :

<

asp:GridView
ID="GridView1"
runat="server"
Visible="false">

</asp:GridView>
Deux requete Sql, une pour le filtre et une simple, sans filtre (celle avec le filtre, comme tu peux le voir, est reliée à tes TextBox) :

<

asp:SqlDataSource
ID="SqlDataSourceFiltre"
runat="server"

ConnectionString="<%$ Ta chaine de connexion %>
"

SelectCommand="SELECT * FROM [TABLE_COMMANDE] WHERE (([FOURNISSEUR] = @FOURNISSEUR) AND ([DATE] >= @DATE_DEB) AND ([DATE] <= @DATE_FIN) AND ([LIBELLE] = @LIBELLE))">

<SelectParameters>

<asp:ControlParameter
ControlID="TextBoxFournisseur"
Name="FOURNISSEUR"
PropertyName="Text"
Type="String"
/>

<asp:ControlParameter
ControlID="TextBoxDateDeb"
Name="DATE_DEB"
PropertyName="Text"
Type="Int32"
/>

<asp:ControlParameter
ControlID="TextBoxDateFin"
Name="DATE_FIN"
PropertyName="Text"
Type="String"
/>

<asp:ControlParameter
ControlID="TextBoxLibelle"
Name="LIBELLE"
PropertyName="Text"
Type="Decimal"
/>

</SelectParameters>

</asp:SqlDataSource>

<asp:SqlDataSource
ID="SqlDataSourceNoFiltre"
runat="server"

ConnectionString="<%$ Ta chaine de connexion %>
"
SelectCommand="SELECT * FROM [TABLE_COMMANDE]">

</asp:SqlDataSource>
Le code-behind effectué lors du clic sur le bouton (c'est du C#) et une fonction qui permet de vérifier si les champs sont remplis :
protected

void ButtonFiltre_Click(
object sender,
EventArgs e){

         if (VerifRempli)         {

                  GridView1.DataSourceID =

"SqlDataSourceFiltre";                  GridView1.DataBind();

                  GridView1.Visible =

true;         }

         else         {

                  GridView1.DataSourceID =

"SqlDataSourceNoFiltre";                  GridView1.DataBind();

                  GridView1.Visible =

true;         }

}

protected
bool VerifRempli(){
         if (TextBoxFournisseur.Text "" || TextBoxDateDeb.Text "" || TextBoxDateFin.Text "" || TextBoxLibelle.Text
"")         {

                  //si au moins une TextBox est remplie

                  return
false;         }

         else         {

                  return
true;         }

}

<hr />
Voilà j'espère que ce début de code pourra t'être utile, tient moi au courant et n'oublie pas de cliquer sur réponse acceptée si la réponse te va.
@Pluche

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
22 juil. 2008 à 09:39
Argh c'est moche quand on affiche !!! J'espère que t'arrive à relire !
Juste j'oubliais pour ton état imprimable je serais toi au clic j'ouvrirais une popup qui affiche le résultat et avec le CSS je modèlerai cette popup pour qu'elle soit imprimable
Tchô

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
0
cs_Djodu69 Messages postés 43 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 29 avril 2010
22 juil. 2008 à 10:45
Merci pour tout ce code ^^
J'ai un petit souci, je code en VB et pas C# et je ne vois pas mon Gridview1 dans le code vb :
Protected Sub ButtonFiltre_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonFiltre.Click

        If (VerifRempli) Then

           GridView1 /// Je ne le vois pas avec l'intellisense

        End If

    End Sub
0
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
22 juil. 2008 à 11:12
Salut,

Là je sait pas trop comment t'aider, le problème ne vient sûrement pas du langage (et puis j'y connait rien en VB). Le retrouve tu si tu tape dans le PageLoad (je viens de voir qu'il n'y en a pas en VB mais on peut peut etre en creer un) ? Est tu sur d'avoir donner le même ID à ton GridView ?
Sinon tu peux toujours faire des recherches sur FindControl qui te permet, avec son ID, de retrouver ton control.

Je viens juste de faire le test en VB mais moi l'Intellisense le retrouve donc ça doit être une erreur toute bête !! Fouille un peu tu vas trouver, et si vraiment tu voit pas envoie moi ton code complet.

@Pluche

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
0
cs_Djodu69 Messages postés 43 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 29 avril 2010
22 juil. 2008 à 11:18
Trouvé ^^ J'ai pas trop compris pourquoi mais c'est pas grave :)

Comment fais tu pour renseigner du code dans ton post en gardant les couleurs et tout ? Comme çà je pourrais te faire voir ce que j'ai fait, j'ai encore un souci :)
0
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
22 juil. 2008 à 11:27
Je fait un copier-coller de Visual Studio au forum. Le problème c'est que si tu écrit après tu ne retrouve pas ta police normal alors j'ecrit ton mon texte et à  la fin seulement j'incorpore le code aux endroits voulus.

C'est quoi ton souci ?

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
0
cs_Djodu69 Messages postés 43 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 29 avril 2010
22 juil. 2008 à 11:43
<hr />

<%





@





Page





Language


= "VB"





MasterPageFile


="~/MasterPage.master"





AutoEventWireup


="false"





CodeFile


="Default3.aspx.vb"





Inherits


="Default3"





title


="Page sans titre"

%>



<





asp


:


Content





ID


="Content1"





ContentPlaceHolderID


="Main"





Runat


="Server"><




asp


:


Label





ID


="Label1"





runat


="server"





Text


="Fournisseur"></


asp


:


Label


><




asp


:


TextBox





ID


="TextBoxFournisseur"





runat


="server"></


asp


:


TextBox


><




asp


:


Label





ID


="Label2"





runat


="server"





Text


="Date entre"></


asp


:


Label


><




asp


:


TextBox





ID


="TextBoxDateDeb"





runat


="server"></


asp


:


TextBox


><




asp


:


Label





ID


="Label3"





runat


="server"





Text


="et"></


asp


:


Label


><




asp


:


TextBox





ID


="TextBoxDateFin"





runat


="server"></


asp


:


TextBox


><




asp


:


Label





ID


="Label4"





runat


="server"





Text


="Libelle"></


asp


:


Label


><




asp


:


TextBox





ID


="TextBoxLibelle"





runat


="server"></


asp


:


TextBox


><




asp


:


Button





ID


="ButtonFiltre"





runat


="server"





Text


="Filtrer"





onclick


="ButtonFiltre_Click"/> 

<




asp


:


GridView





ID


="GridView1"





runat


="server"





Visible


="false"></




asp


:


GridView


><




asp


:


SqlDataSource





ID


="SqlDataSourceFiltre"





runat


="server"





ConnectionString


="

<%$ ConnectionStrings:ConnectionString %>


"





SelectCommand


"SELECT Fournisseur.IdFournisseur, Fournisseur.Nom, ComEnt.Datecde, ComEnt.[NøCom], ComLign.[Nøligne], Chantier.Nom_chantier, ComLign.CodRef, ComLign.LibRef, ComLign.Unit, ComLign.Qt‚, ComLign.PrixUnit FROM (((ComEnt INNER JOIN Fournisseur ON ComEnt.[NøFourn] Fournisseur.[NøFourn]) INNER JOIN Chantier ON ComEnt.[NøChant] = Chantier.Code_analytique_chantier) INNER JOIN ComLign ON ComEnt.[NøCom] = ComLign.[NøCom]) WHERE ((Fournisseur.[Nom] = @FOURNISSEUR) AND (ComEnt.[DateCde] >= @DATE_DEB) AND (ComEnt.[DateCde] <= @DATE_FIN) AND (ComLign.[LibRef] = @LIBELLE))"><




SelectParameters


><




asp


:


ControlParameter





ControlID


="TextBoxFournisseur"





Name


="FOURNISSEUR"





PropertyName


="Text"





Type


="String"/><




asp


:


ControlParameter





ControlID


="TextBoxDateDeb"





Name


="DATE_DEB"





PropertyName


="Text"





Type


="Int32"/><




asp


:


ControlParameter





ControlID


="TextBoxDateFin"





Name


="DATE_FIN"





PropertyName


="Text"





Type


="String"/><




asp


:


ControlParameter





ControlID


="TextBoxLibelle"





Name


="LIBELLE"





PropertyName


="Text"





Type


="Decimal"/></




SelectParameters


></




asp


:


SqlDataSource




<




asp


:


SqlDataSource





ID


="SqlDataSourceNoFiltre"





runat


="server"





ConnectionString


="

<%$ ConnectionStrings:ConnectionString %>


"





SelectCommand


"SELECT Fournisseur.IdFournisseur, Fournisseur.Nom, ComEnt.Datecde, ComEnt.[NøCom], ComLign.[Nøligne], Chantier.Nom_chantier, ComLign.CodRef, ComLign.LibRef, ComLign.Unit, ComLign.Qt‚, ComLign.PrixUnit FROM (((ComEnt INNER JOIN Fournisseur ON ComEnt.[NøFourn] Fournisseur.[NøFourn]) INNER JOIN Chantier ON ComEnt.[NøChant] = Chantier.Code_analytique_chantier) INNER JOIN ComLign ON ComEnt.[NøCom] = ComLign.[NøCom]) WHERE (LEFT (ComLign.LibRef, 1) &lt;&gt; '.') ORDER BY Fournisseur.Nom, ComEnt.Datecde DESC, ComEnt.[NøCom] DESC, ComLign.[Nøligne]"></




asp


:


SqlDataSource




 

</




asp


:


Content


>

<hr />


Partial








Class

Default3



Inherits

System.Web.UI.Page



Protected





Sub

ButtonFiltre_Click(


ByVal

sender


As





Object

,


ByVal

e


As

System.EventArgs)


Handles

ButtonFiltre.Click



If

(VerifRempli())


Then


GridView1.DataSourceID =





"SqlDataSourceFiltre"


GridView1.DataBind()


GridView1.Visible =





True








Else


GridView1.DataSourceID =





"SqlDataSourceNoFiltre"



GridView1.DataBind()


GridView1.Visible =





True








End





If 










End





Sub 

 










Function

VerifRempli()


As





Boolean








If

(TextBoxFournisseur.Text =


""





OrElse

TextBoxDateDeb.Text =


""





OrElse

TextBoxDateFin.Text =


""





OrElse

TextBoxLibelle.Text =


""

)


Then








Return





False








Else








Return





True








End





If








End





FunctionEnd







Class

<hr />
La requête sans filtre fonctionne dans le testeur de requête.
Mon problème est qu'au lancement du site, le gridview ne s'affiche pas. Par défaut j'aimerai qu'il affiche les données sans filtre.
Le deuxième problème est que dès que j'appuie sur le bouton filtrer en ayant saisi des informations ou non il bloque sur GridView1.DataBind() (mis en gras) et me dis : Mot clé non pris en charge : 'provider'.

Que faire ? :s
0
cs_Djodu69 Messages postés 43 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 29 avril 2010
22 juil. 2008 à 11:56
J'ai rajouté :ProviderName

="<%$ ConnectionStrings:ConnectionString.ProviderName %>
"

à mes data sources pour eviter l'erreur.

Par contre, le filtre ne marche toujours pas. Et par défaut il ne m'affiche toujours rien.
0
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
22 juil. 2008 à 12:12
Si tu veux un affichage par défaut enlève le Visible = "false" dans ton GridView et donne lui un DataSourceId de base :
<

asp:GridView
ID="GridView1"
runat="server"
DataSourceID="SqlDataSourceNoFiltre">

</asp:GridView>

Là ou il bloque c'est que ta requete ne doit pas marcher !!
Pour que ta requête fonctionne il faut absolument que tout tes champs soient remplis, et que tu modifie les Type des ControlParameter, ceux que j'avais mis sont des exemples !!!
Du genre pour les dates :
<

asp:ControlParameter
ControlID="TextBoxDateDeb"
Name="DATE_DEB"
PropertyName="Text"
Type="DateTime"
/>

un libelle n'est pas un decimal non plus, etc... L'Intellisense pourra t'aider pour ça.
Où même crée tes SqlDataSource avec la ToolBox de VisualStudio et modifie en mode Design, ça t'apprendra aussi comment ça fonctionne et évitera des erreurs. Si tu l'avais fait avec la ToolBox les ControlParameter se seraient construits dynamiquement selon tes champs et ça t'aurais éviter cette erreur.

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres pers
0
cs_Djodu69 Messages postés 43 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 29 avril 2010
22 juil. 2008 à 14:40
Merci de me consacrer de ton temps.
J'ai bien compris pour l'affichage par défaut, sa marche nickel.
Mon problème est autour de la requête du DataSourceFiltre. J'ai essayé de la simplifiée pour voir, mais cela ne marche toujours pas.
Est-il possible en mode design de créer des jointure et de rajouter des paramètres en même temps dans une seul et unique requête.

En effet quand clique sur Configurer l'instruction Select, j'ai le choix entre les options "Spécifiez une instruction SQL personnalisée ou une procédure stockée" et "spécifiez les colonnes d'une table ou d'une vue " Si je choisis la première je peut creer des jointures comme je veux mais je ne peut pas créer des requête paramétrée. Dans l'autre c'est l'inverse. Que Faire ?
0
cs_Djodu69 Messages postés 43 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 29 avril 2010
22 juil. 2008 à 16:07
La procédure stockée je peut la créer sous Access ?
0
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
22 juil. 2008 à 16:59
Bien sur,
Tu crée une nouvelle requête, tu passe en mode SQL (Affichage => Mode SQL) et tu utilise la syntaxe des procédures stockees. J'ai pas réussie à te trouver un tuto extra facile mais cherche un peu sur google tu finira par trouver. Au pire va sur le forum de www.sqlfr.com

@pluche

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres pers
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
23 juil. 2008 à 00:48
Bonsoir,

Sur la question de départ, il y a un tutorial 'classique' (en vidéo, mais en anglais). Pour débuter, je trouve ça pas trop mal. Ca n'aborde pas vraiment la question des événéments et du code, mais explique la gestion de base d'un contrôle gridview avec une dropdownlist, avec mise à jour de la base, et permet de comprendre globalement comment ça marche :
 http://download.microsoft.com/download/8/3/6/836dd5f8-fa92-499f-8219-0d326f13bf18/hilo_data_final.wmv
Attention, toutefois, c'est fondé sur la bdd d'exemple de MS. En partant d'une base access, il y a des petits détails à changer (mais rien qui défie l'entendement).
Cela dit, je n'ai pas trop suivi la discussion : mais si tu peux passer aussi à sql server, plutôt que de changer seulement d'interface, c'est beaucoup mieux... le gain en traitement, surtout sur des bases un peu lourdes, est incomparable.

GGtry
0
cs_Djodu69 Messages postés 43 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 29 avril 2010
23 juil. 2008 à 08:09
Merci c'est sympa.

Je regarde çà tout de suite :)
0
cs_Djodu69 Messages postés 43 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 29 avril 2010
23 juil. 2008 à 08:18
Bonjour

J'ai un petit souci quand je veux créer une requête paramétrée avec l'assistant. En effet je vois 2 fois mes controles dans la liste des controles et quand j'en sélectionne un, il ne se met pas à jour en bas et laisse un "?".

Voir la capture : http://www2.partage-facile.com/1052669-capture.png.html

De quoi vient ce problème ?

Merci par avance
0
ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
23 juil. 2008 à 08:47
Salut,
le fait que tu le voit 2 fois n'est absolument pas grave, c'est même normal (te dire pourquoi après ça ...). Il faut que tu en selectionne un puis que tu appuie sur le bouton "Ajouter" pour valider ton choix.
@Pluche

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
0
cs_Djodu69 Messages postés 43 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 29 avril 2010
23 juil. 2008 à 10:20
Autre question ?

J'ai réussi a faire 2 filtre sur un gridview, le problème c'est que je suis obligé de remplir les 2 si je veux filtrer. Est-ce possible de filtrer avec qu'un seul champ. Sachant que dans la requête il attends les 2 arguments ?
0
Rejoignez-nous