Templar_net
Messages postés30Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention28 septembre 2005
-
30 mai 2005 à 17:06
Templar_net
Messages postés30Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention28 septembre 2005
-
31 mai 2005 à 16:40
Bonjour à tous,
Je suis sur .NET 2003 depuis quelques jours pour developper une petite application Web avec une base de données SQL 2000. Je suis bien sur débutant dans ce domaine et je dois très vite réaliser cette application.
J'ai plusieurs livres pour m'aider :
Formation à ASP.NET (Fourni avec le logiciel) = Livre 1
Guide pas à pas (Fourni avec le logiciel) = Livre 2
ASP .NET (Micro - application) = Livre 3
Le premier test que je veux realiser est tout simple : J'ai une table COMPAGNIE qui contient un identifiant et un libellé. Je veux donc avoir mon datagrid sur ma page ASPX qui m'affiche l'identifiant et le libellé, avec, devant, le bouton modifier qui devient ensuite mettre à jour / Annuler, comme on peut le voir sur l'exemple page 618 du livre 3 ou 368 du livre 2.
Ma base de données est faite et j'ai suivi la procédure du livre 1 pour mon application WEB APS.NET donc : ajout d'un composant, création d'un SqlDataAdapter, puis utilisation du générateur de requetes. J'ai donc mon sqldataAdapter1 et mon sqlConnection1 qui sont créés. Ensuite je crée le myDataSet.xsd, puis mon myDataSet1 et j'ajoute les lignes de code comme indiqué dans le livre 1.
Et finalement j'ajoute mon DataGrid sur ma page ASPX. Et c'est là ou ca se complique :
dans le générateur de propriétés, je choisis "colonne bouton" et le type "modifier, mettre à jour, annuler".
Quand je demande d'afficher dans mon naviguateur, j'ai bien les 2 compagnies que j'ai entré dans la BD et devant le bouton modifier qui apparaît. Bien sur quand je clique dessus rien ne se passe car le code n'est pas associé.
J'utilise donc a partir de ce moment la, les livre 2 et 3 dans lesquels je constate qu'il faut ajouter dans le code HTML les onCancelCommant="MondataGrid_Cancel", onEditCommand="MonDataGrid_Edit", ... etc qui vont appeler mes fonctions.
Le seul souci c'est que dans ces deux livres, les codes sont mis SUR la page ASPX en mettant un <script> </script>, alors que pour ma part j'ai une page en plus ASPX.VB qui contient deja mon "page_load" par exemple. Donc il serait plus judicieux de mettre tout mon code labas, ... mais ca ne marche pas.
Exemple :
Public Sub MonDataGrid_Cancel(ByVal source As System.Object, ByVal e As DataGridCommandEventArgs)
DataGrid1.EditItemIndex = -1
DataGrid1.DataBind()
End Sub
De plus pour les boutons supprimer et insert, j'ai vu qu'il y avait un code de généré dans mon coponent et qui s'appelle, "sqlDeleteCommand1", "sqlUpdateCommand1", ... etc
Exemple :
'SqlInsertCommand1
'
Me.SqlInsertCommand1.CommandText = "INSERT INTO Compagnie(libelle_compagnie) VALUES (@libelle_compagnie); SELECT id_c" & _
"ompagnie, libelle_compagnie FROM Compagnie WHERE (id_compagnie = @@IDENTITY)"
Me.SqlInsertCommand1.Connection = Me.SqlConnection1
Me.SqlInsertCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@libelle_compagnie", System.Data.SqlDbType.VarChar, 50, "libelle_compagnie"))
'
Donc ma question est de savoir : est-ce que quelqu'un sait comment je peux avoir mes boutons qui fonctionne correctement en passant par ma page aspx.vb (Modifier, mettre à jour, annuler dans un premier temps) et mon composant (les requete Insert, Delete) pour ne pas avoir à me retaper tout le code en script dans un deuxième temps, ... ?
Car je trouve que ces deux moyens sont pratiques est facile d'utilisation, donc pourquoi ne pas s'en resservir plutot que d'aller mettre son code dans un script ???
J'espère avoir détaillé assez mon souci si vous voulez plus de détail ou que je vous communique mon code c'est possible.
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 30 mai 2005 à 17:53
héhé le bouquin de Richard puis le bouquin pas à pas de Ms press ;-) c'est pour moi les deux meilleurs qui existent en francais sur asp.net bien que celui de Richard est justement un peu limite niveau accés au base de données, et pour travailler avec VS.net, d'ou ton problème avec le code behind (le fichier aspx.vb)
j'ai pas tout lu ton post, mais d'aprés ce que j'ai lu, tes evenements ne seront jamais declenché car tu ne les appelle pas :-/
pour faire correctement. En haut de la page de code aspx.vb tu dois avoi deux drops, celui de droite tu dois avoir ton datagrid, tu le selectionnes, puis celui de gauche tu peux choisir ton evenement.
normalement ca va automatiquement te rajouter ce code
Public Sub MonDataGrid_Cancel(ByVal source As System.Object, ByVal e As DataGridCommandEventArgs) handles me.dg1.CancelCommand
end sub
ou un truc du genre, tes evenements seront donc declenchés, en fait il te manquait le handles c'est lui qui indique quand c'est declenché, ca doit etre expliqué dans le bouquin3 (c'est bien un gros bouquin bleu ?, je l'ai lu a la vitesse ultra grand "V" celui la :p)
Templar_net
Messages postés30Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention28 septembre 2005 31 mai 2005 à 16:40
Désolé de répondre si tard, mais je n'ai commencé le taf que cet apres-midi aujourd'hui. Ok, ca roule il manquant bien le Handle. Mais il y avait aussi un autre souci, dans le bouquin ils font une fonction BindData( ) que je n'avais pas. Donc quand je cliquais sur le bouton, ca ne réaffichait pas mes données.
En plus Richard met dans son BindData( ), un rappel d'ouverture de connection, sa requête, etc... Je me disais que ca me semblait bizarre une fois de plus ayant mon composant de devoir tout réécrire en dur, ... En cherchant un peu j'ai trouver la solution en mettant dans mon BindData ce qu'on trouve dans la fonction page_load :
Private Sub BindData()
myComponent.FillDataSet(MyDataSet1)
DataGrid1.DataBind()
End Sub
Et donc pour mon bouton Edit :
Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand
DataGrid1.EditItemIndex = e.Item.ItemIndex
BindData()
End Sub
Et ca marche très bien.
Maintenant reste la 2e question que je n'ai pas résolu, ...
Dans l'initialisation de mon composant je vois les fonctions INSERT, UPDATE et DELETE comme ceci :
Là aussi je voudrais l'associé directement à mon Private Sub DataGrid1_UpdateCommand. Mais je ne sais pas commant lui dire d'aller le chercher dans mon composant. Quand j'applique ta méthode, je tape dans ma fonction : "MyComponent." au moment ou je tape "." un menu s'affiche dans lequel apparait SqlDeleteCommand1, SqlUpadateCommand1, ... Je sélectionne donc SqlUpadateCommand1, ce que me donne MyComponent.SqlUpadateCommand1( ) mais il m'ecrit : "Un accès à la proprièté doit assigner la propriété ou utiliser sa valeur."
Qu'est ce que cela signifie ? Et donc comment associer correctement cet élément du composant au déclenchement de l'événement lors du clic comme pour la modification ou l'annulation.