Dataset vide après changement de page [Résolu]

Messages postés
11
Date d'inscription
dimanche 17 mai 2009
Dernière intervention
18 novembre 2009
- - Dernière réponse : cs_c4sp
Messages postés
11
Date d'inscription
dimanche 17 mai 2009
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
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Dernière intervention
26 novembre 2013
3
Merci
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.

Merci Mayzz 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de Mayzz
Messages postés
11
Date d'inscription
dimanche 17 mai 2009
Dernière intervention
18 novembre 2009
0
Merci
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

Commenter la réponse de cs_c4sp
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Dernière intervention
8 janvier 2014
0
Merci
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
Commenter la réponse de cboulas
Messages postés
11
Date d'inscription
dimanche 17 mai 2009
Dernière intervention
18 novembre 2009
0
Merci
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
Commenter la réponse de cs_c4sp
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Dernière intervention
26 novembre 2013
0
Merci
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.
Commenter la réponse de Mayzz
Messages postés
11
Date d'inscription
dimanche 17 mai 2009
Dernière intervention
18 novembre 2009
0
Merci
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 ?
Commenter la réponse de cs_c4sp
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Dernière intervention
26 novembre 2013
0
Merci
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.
Commenter la réponse de Mayzz
Messages postés
11
Date d'inscription
dimanche 17 mai 2009
Dernière intervention
18 novembre 2009
0
Merci
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
Commenter la réponse de cs_c4sp
Messages postés
11
Date d'inscription
dimanche 17 mai 2009
Dernière intervention
18 novembre 2009
0
Merci
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
Commenter la réponse de cs_c4sp
Messages postés
11
Date d'inscription
dimanche 17 mai 2009
Dernière intervention
18 novembre 2009
0
Merci
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
Commenter la réponse de cs_c4sp

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.