Dataset vide après changement de page

Résolu
cs_c4sp Messages postés 11 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 18 novembre 2009 - 12 nov. 2009 à 11:57
cs_c4sp Messages postés 11 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 18 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

10 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
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.
3
cs_c4sp Messages postés 11 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 18 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

0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
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
0
cs_c4sp Messages postés 11 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 18 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
0

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

Posez votre question
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
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.
0
cs_c4sp Messages postés 11 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 18 novembre 2009
12 nov. 2009 à 16:53
Ok.

donc je devrais pouvoir utiliser mon dataset en en source de donnée pour un formview dans lequel j'afficherai les données du dataset.

Est ce que je pourrai changer de ligne dans mon dataset et afficher les données qui la constituent ?
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
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.
0
cs_c4sp Messages postés 11 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 18 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.

eVo
0
cs_c4sp Messages postés 11 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 18 novembre 2009
12 nov. 2009 à 22:39
Ok autant pour moi.

Merci pour a toi Mayzz et a cboulas pour vos réponses:

J'ai trouver un code qui devrait m'aider:
http://www.aspfr.com/codes/UTILISATION-GRIDVIEW-FORMVIEW-ACCESSDATASOURCE-INSERTION_42414.aspx
Je vais faire un test et je mettrai le post comme résolu si sa fonctionne bien.

Ci besoin je reviendrai vers vous.

Encore merci.

c4sp
0
cs_c4sp Messages postés 11 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 18 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 ?

c4sp
0
Rejoignez-nous