Se connecter avec
S'enregistrer | Connectez-vous

VB 2010 - Formulaire + SQL

Dernière réponse : dans Programmation

Bonjour à toutes et à tous,


Alors voila, je me lance dans le développement ASP.NET et je rencontre une petite difficultés.
Je me lance dans un projet de gestion de stock.

Je dispose d'une base de données : Stock avec une table "Article" avec 5 arguments ( Localisation, Nom, Quantité, Date et Commentaire ).

J'ai réussi à faire la partie "Consultation" qui retourne un tableau avec les valeurs de la base de données.
Cependant, j'aimerai que le client puisse ajouter un article.

Il va saisir les 5 attributs puis en cliquant sur "Ajouter" la requête SQL est générée et ajoute à la table les valeurs saisies.

Je fais donc appel à vous pour me débloquer.

Je pensais donc à une div contenant la saisie des attributs et le submit du genre :

<div class="attributs">
<h3>Localisation: </h3>
<input name="Localisation" type="text"/>
<h3>Nom: </h3>
<input name="Nom" type="text"/>
<h3>Quantite: </h3>
<input name="Quantite" type="text"/>
<h3>Date: </h3>
<input name="txtDate" type="text"/>
<h3>Commentaire: </h3>
<input name="Commentaire" type="text"/>
<input name="btnGo" type="submit" value="Go" />
</div>

Mais après comment renvoyé tout ceci en requete ?!

Les requêtes SQL c'est pas un problème, j'ai juste quelques difficultés à faire le lien entre lien entre les deux.

Merci d'avance :) 

Autres pages sur : 2010 formulaire sql

Lassé par la pub ? Créez un compte
Expert Programmation

Bonjour,

Pour faire un formulaire tu dois utiliser la balise <form>:

Exemple:

  1. <form method="post" action="pagedetraitement.php">
  2. <input type="text" name="input1" />
  3. <input type="submit" value="Envoyer" />
  4. </form>


Et sur la page de traitement tu récupère le ou les $_POST['input'];
Expert Programmation

Salut,

@allstar27: en ASP.Net, il n'y a pas de $_POST :) 

@terrmarks: en ASP.NET, tu as déjà des contrôles qui sont quasiment tout fait pour faire ça.
Il faut que tu ajoutes une SqlDataSource à ta page ASP.NET, et en mode design, tu as un bouton pour la configurer.
Ensuite, tu peux ajouter un DetailsView sur ta page et le lier à ta SqlDataSource, et les champs vont être générés automatiquement.

Merci beaucoup Omar pour l'idée !

J'ai découvert le ListView et faire un peu comme sur ce tutoriel : http://msdn.microsoft.com/fr-fr/library/bb515103.aspx

Cependant il m'est impossible de réaliser cette étape :
Activez la case à cocher Générer des instructions INSERT, UPDATE et DELETE, puis cliquez sur OK.

Les zones sont grisés :


Est ce que vous avez une idée du pourquoi du comment ?!
Car c'est exactement ce qu'il me fallait :( 

Merci d'avance
Expert Programmation

Salut,

Tu te bases sur un SqlDataSource ? Est-ce que tu as bien sélectionné ta clé primaire ?
Il est indiqué dans la partie "Générer des instructions INSERT, UPDATE et DELETE", qu'il faut forcément sélectionner tous les champs clés primaires pour activer l'option.

Arf, je me disais bien, va falloir que je trouve une astuce ..

Est ce que tu sais comment modifier l'apparence d'un ListView avec autant de détail d'un GridView ?

Car je ne peux pas modifier sa taille, tout les styles .. alors que dans les propriétés du GridView c'est possible :x

Merci d'avance ;) 
Expert Programmation

Une ListView n'est peut être pas ce que tu veux aussi... si tu veux une GridView, utilise une GridView, c'est le même principe pour la DataSource, tu peux binder la GridView à une SqlDataSource et faire exactement la même chose.
La GridView te permet même de faire de l'édition/suppression en direct dans la table, et tu peux modifier le format d'affichage de tes données, le format d'édition, etc...

Me revoilà !

Grâce à la GridView et les configurations qui vont bien, j'ai réussi à faire mon edition et supression de données avec le même affichage.

Cependant, je ne comprends pas pourquoi le GridView ne propose pas directement la fonction insertion. J'ai vu sur le net que cela était possible mais je n'en ai pas compris la méthode ... :x

Est ce que vous connaissez le moyen de faire cela ?
Ou alors, quel outil me permettrait d'obtenir le résultat que je souhaite ?

Merci d'avance pour vos aides ;) 
Expert Programmation

En effet, il faut utiliser un "hack" pour pouvoir utiliser la fonction INSERT.
Généralement, ce qu'on fait, c'est qu'on propose un formulaire à côté (FormView de mémoire) où il est pratique d'insérer les données.

Sinon, ce qui se fait aussi, c'est de mettre la fonction d'INSERT dans le footer de la GridView, mais ça oblige à ajouter toutes les TextBox à la main, ainsi que les contrôles de validation.
Tu peux regarder ici si l'anglais ne te fais pas trop peur (bon, c'est principalement du code, donc ça devrait aller, il y a juste quelques explications au départ sur ce qui doit être fait) :
http://geekswithblogs.net/casualjim/articles/51360.aspx

J'avais déjà vu cette démarche, mais j'avais un peu pris peur, je me suis lancé, cependant j'ai comparé mon code et celui présent dans le lien.

Je remarque qu'il faut que je déclare un ItemTemplate

  1. <ItemTemplate>
  2.  
  3. <asp:LinkButton ID="lbEdit" runat="server" CausesValidation="False" CommandName="Edit”
  4. Text="Edit" >asp:LinkButton> <asp:LinkButton ID="lbDelete" runat="server"
  5.  
  6. CausesValidation="False" CommandName="Delete" Text="Delete">asp:LinkButton>
  7.  
  8. </ItemTemplate>


Mais VisalBasic 2010 ne reconnait pas cette méthode :x
Voici l'erreur retournée lorsque je lance mon code :

Le type 'System.Web.UI.WebControls.GridView' ne possède pas de propriété publique appelée 'ItemTemplate

Et j'ai remarqué que le LinkButton est rappelé de nombreuses fois donc indispensable.

Est ce que parce que je n'ai pas encoré intégré le code source présent à la fin ?

  1. protected void lbInsert_Click(object sender, EventArgs e)
  2.  
  3. {
  4.  
  5. odsIngredient.Insert();
  6.  
  7. }
  8.  
  9. protected void LinkButton2_Click(object sender, EventArgs e)
  10.  
  11. {
  12.  
  13. ((TextBox)gvIngredient.FooterRow.FindControl("tbIngredient")).Text = "";
  14.  
  15. ((TextBox)gvIngredient.FooterRow.FindControl("tbStock")).Text = "";
  16.  
  17. ((TextBox)gvIngredient.FooterRow.FindControl("tbMinStock")).Text = "";
  18.  
  19. }
  20.  
  21. protected void odsIngredient_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
  22.  
  23. {
  24.  
  25. string Ingredient = ((TextBox)gvIngredient.FooterRow.FindControl("tbIngredient")).Text;
  26.  
  27. string stock = ((TextBox)gvIngredient.FooterRow.FindControl("tbStock")).Text;
  28.  
  29. string minstock = ((TextBox)gvIngredient.FooterRow.FindControl("tbMinStock")).Text;
  30.  
  31. e.InputParameters["ProductIngredient_Name"] = Ingredient;
  32.  
  33. e.InputParameters["ProductIngredient_Stock"] = stock;
  34.  
  35. e.InputParameters["ProductIngredient_MinStock"] = minstock;
  36.  
  37. }


Dois-je l'intégré comme dans le lien ? Après ma dernière balise ASP ?

Merci pour ton aide ;) 
Expert Programmation

Le <ItemTemplate> se trouve dans <Columns>, et non pas à la racine de <asp:GridView>
Il faut que tu aies:
  1. <asp:GridView ...>
  2. <Columns>
  3. <ItemTemplate>...</ItemTemplate>
  4. </Columns>
  5. </asp:GridView>


Et pour le code, c'est pour gérer le clics sur les boutons. Tu auras quelques modifications à faire afin de récupérer tes propres contrôles (le FindControl), et de le faire pour toutes tes données.
Et tu stockeras ça dans le e.InputParameters comme là, tout en gardant les noms des colonnes dans ta base de données.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde