cs_c4sp
Messages postés11Date d'inscriptiondimanche 17 mai 2009StatutMembreDernière intervention18 novembre 2009
-
12 nov. 2009 à 11:57
cs_c4sp
Messages postés11Date d'inscriptiondimanche 17 mai 2009StatutMembreDernière intervention18 novembre 2009
-
13 nov. 2009 à 09:31
Bonjour à tous.
Actuellement, novice en VB.net, je developpe une application qui doit permettre d'afficher les contenu d'une base de donnée suivant des critères de recherches.
dans un premier formulaire (default.aspx) je fais j'enregistre le resultat d'une requete sql dans un dataset et l'affiche dans un gridview. Jusque là pas de problème.
L'utilisateur selectionne une ligne du gridview et appuies sur un bouton pour afficher un nouveau formulaire (fiche.aspx) dans lequel apparaissent l'ensemble des données correspondant à la ligne selectionnée.
Seulement le dataset est vide à ce moment làJ'ai beau cherché je ne comprend pas où ce situe le problème. Comment faire pour que le dataset soit accessible depuis les deux formulaires ?
Pourriez vous m'aider s'il vous plait.
N'hesitez pas à me demander un complément d'information si besoin.
Cordialement
Ci joint le code :
default.aspx
Imports System
Imports System.Web
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.Odbc
Imports Oracle.DataAccess.Client
Imports System.Web.Script.Services.ScriptServiceAttribute
Partial Class defin
Inherits System.Web.UI.Page
Public Database As New Database
Private search As New QueryParam
Dim Query As String
Protected Sub SearchButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles SearchButton.Click
'Function qui genere lq requete sql
Query = search.GenerateQuery(DropDownListCIV, TextBoxNOM, TextBoxPRENOM, _
TextBoxDATA, DropDownListETAB, TextBoxDIST, _
TextBoxVOIE, DropDownListVILLE, CheckBoxNUM, CheckBoxNOM)
'Fonction qui rempli le dataset
Database.DataConnec(Query, GridView1)
End Sub
fiche.aspx
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Data.Odbc
Partial Class fiche2
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim FicheControle As New FicheControle
Dim Database As New Database
If Not Page.IsPostBack Then
Try
'Fiche est une structure qui contient tous les controle du formulaire
FicheControle.NOM.Text = Database.ds.Tables("eleve").Rows(Database.Rowselected).Item(5).ToString
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End If
End Sub
End Class
Database.vb
Imports Microsoft.VisualBasic
Imports System.Data.Odbc
Imports System.Data
Public Structure FicheControle
Dim NOM As TextBox
Dim PRENOM As TextBox
Ens Structure
Public Class Database
Public ds As New DataSet
Public DataTable As DataTable
Public Rownumber As Integer
Public Rowselected As Integer
Public ObjetDataRow As DataRow
Public ObjetCommandBuilder As OdbcCommandBuilder
Public Sub DataConnec(ByVal query As String, ByVal GridView1 As GridView)
Dim cn As New OdbcConnection(ConfigurationManager.ConnectionStrings("DataBaseAPIConnectionsString1").ConnectionString)
Dim cmd As New OdbcCommand(query, cn)
Dim da As New OdbcDataAdapter(cmd)
da.Fill(ds, "eleve")
DataTable = ds.Tables("eleve")
Rownumber = ds.Tables("eleve").Rows.Count
GridView1.AutoGenerateSelectButton = True
GridView1.DataSource = ds
GridView1.DataBind()
End Sub
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 12 nov. 2009 à 21:27
Heu en fait non...
En ASP.Net oublie le DataSet... C'est l'SqlDataSource (pour le SQL. Une sorte de TableAdapter avec BindingSource mais ne pouvant contenir que 4 requêtes). Cet SqlDataSource te permet de définir la source de données et le Binding de chaque contrôle.
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
cs_c4sp
Messages postés11Date d'inscriptiondimanche 17 mai 2009StatutMembreDernière intervention18 novembre 2009 12 nov. 2009 à 12:07
Vu que certains code ne sont pas lisible je les reposte :
Default.aspx.vb :
Imports System
Imports System.Web
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.Odbc
Imports Oracle.DataAccess.Client
Imports System.Web.Script.Services.ScriptServiceAttribute
Partial Class defin
Inherits System.Web.UI.Page
Public Database As New Database
Private search As New QueryParam
Dim Query As String
Protected Sub SearchButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles SearchButton.Click
'Function qui genere lq requete sql
Query = search.GenerateQuery(DropDownListCIV, TextBoxNOM, TextBoxPRENOM, _
TextBoxDATA, DropDownListETAB, TextBoxDIST, _
TextBoxVOIE, DropDownListVILLE, CheckBoxNUM, CheckBoxNOM)
'Fonction qui rempli le dataset
Database.DataConnec(Query, GridView1)
End Sub
fiche.aspx.vb
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Data.Odbc
Partial Class fiche2
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim FicheControle As New FicheControle
Dim Database As New Database
If Not Page.IsPostBack Then
Try
'Fiche est une structure qui contient tous les controle du formulaire
FicheControle.NOM.Text = Database.ds.Tables("eleve").Rows(Database.Rowselected).Item(5).ToString
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End If
End Sub
End Class
cboulas
Messages postés2641Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention 8 janvier 201416 12 nov. 2009 à 12:53
Salut,
Bienvenu dans la proplématique Web, pour comprendre ton problème je vais t'expliquer grossièrement le fonctionnement de l'ASP.Net, je dit bien grossièrement :
1 - L'utilisateur envoi une requette demandant une page au serveur
2 - Le serveur créer la page demandée, mais vide
3 - Le serveur traite les spécificités de la requette (remplissage d'un tableau etc..)
4 - Le serveur compile ta page au format HTML/Javascript... et te l'envoi avec dedant une variable contenant les valeurs modifiée par rapport à cette même page vide
5 - Tu envoi une nouvelle demande, le serveur créer une page vierge, rempli les champs et te la renvoi.
Ton problème se pose car la page recréer à chaque requette le DataSet, il faut donc que tu trouve un moyen de transférer ces données à ta seconde page sans passer par le DS
Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
cs_c4sp
Messages postés11Date d'inscriptiondimanche 17 mai 2009StatutMembreDernière intervention18 novembre 2009 12 nov. 2009 à 16:14
Tout d'abord, merci pour ces informations.
Maintenant si je comprend bien je ne peu apriori pas utiliser un dataset pour mon projet.
Et je peux difficilement envoyer le contenu de la base de donnée en paramètre lors d'un redirection avec response.redirect() etant donné que c est tres peu pratique.
Mais alors comment faire pour stocker des informations de la base de donnée sans pour autant multiplier les requetes sur celle ci ?
Auriez vous une solution ou tout simplement une piste que que je puisse arriver a mes fins ?
Cordialement
eVo
Vous n’avez pas trouvé la réponse que vous recherchez ?
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 12 nov. 2009 à 16:37
Salut,
En ASP.Net, le plus simple est de lier directement tes contrôles à une source de données, tu as pour cela :
Des FormView, GridView, DetailsView, DataList.
Ces éléments te permettent de travailler avec les données de sorte à n'avoir aucun code à saisir (code vb), il te suffit juste de choisir une source de données et de paramètrer le DataSet fortemant typé lié à celle-ci, la liaison avec les contrôles se fait via des assistants.
@+ Mayzz.
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 12 nov. 2009 à 17:10
Pardon, en fait je t'ai dis de grosses boulettes...
(Ca fait un p'tit moment que je n'ai pas travailler les données en ASP.Net)
Donc voila, la différence entre le Winform et l'ASP.Net c'est que l'un travaille en mode connecté et pas l'autre...
En Winform, ton DataSet Fortement typé n'envoi les requêtes que lors ce que c'est nécéssaire, l'ASP.Net lui met à jour et envoi les requêtes à chaque chargement de page (ou allé/retour: PostBack)
Donc en ASP.Net tu dois lier tes controles à une source de données, en passant par des DataSources (ObjectDataSource, SqlDataSource, AccessDataSource etc...), c'est DataSources te permettent de stocker 4 procésures (SELECT, INSERT, DELETE, UPDATE) le classique SQL, et sont lié à une chaîne de connexion se trouvant dans ton web.config (comme le DataSet est lié à la chaine de connexion de l'app.config). Pour la mise en place de ceux-ci dans le smarttag de chaques contrôles à lier aux données se trouve une option 'Choisir la source de données'.
A partir de la, un GridView par exemple, peut être lié à la base et te permettre de la modifier et mettre à jour suivant les requêtes du DataSource qui lui est associé.
En gros, grâce à ces DataSources, tes contrôles disposent eux mêmes de requêtes SQL individuelles.
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
cs_c4sp
Messages postés11Date d'inscriptiondimanche 17 mai 2009StatutMembreDernière intervention18 novembre 2009 12 nov. 2009 à 20:06
ok dis moi si je me trompe.
je peux définir ma base de donn2e (ou ?) mon dataset comme source de donnée d'un formview. dans ce formview je peux insérer des controles tel que des textbox pour afficher les données.
cs_c4sp
Messages postés11Date d'inscriptiondimanche 17 mai 2009StatutMembreDernière intervention18 novembre 2009 13 nov. 2009 à 09:31
J'ai fait un test avec l'exemple que j'ai trouvé, je peux donc faire des select, update, insert et delete sur ma table.
Mais je me suis aperçu que cette methode ne me permettrai pas de faire une fonctionnalité dont j'aimerai doté mon projet web.
Je m'explique. Je fait un recherche sur un nom (ex DUPONT), j'affiche dans un gridview le resultat de cette recherche.
je selectionne une ligne affiche les données correspondantes (prénom, adresse etc). J'aimerai pouvoir passer a l'enregistrement suivant de ma première requete avec un simple bouton.
Comment puis je faire pour stocker au minimum les valeurs du champ primaire de la premiere requete sql ?