Débutant en asp.net - pb navigation dans dataview [Résolu]

Signaler
Messages postés
63
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 mai 2009
-
Messages postés
63
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 mai 2009
-
Bonjour,
 je débute en asp.net.
 Je souhaite avoir les mêmes facilités de navigation que avec un recordset sous VB.
 Aussi après avoir regarder un peu les différents sources sur le site, j'ai assemblé ce petit bout de code :

Imports System.Data.OleDb

Public Class Annuaire
    Inherits System.Web.UI.Page

    Private Connection As New OleDbConnection
    Private myDataView As DataView
    Private MyDataSet As DataSet
    Private position As Integer

    Public Sub connecter(ByVal nombd As String)
        Try
            Connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & nombd
            Connection.Open()
        Catch ex As Exception
            lbPosition.Text = ex.Message
        End Try
    End Sub

    Public Sub deconnecter()
        Try
            Connection.Close()
        Catch ex As Exception
            lbPosition.Text = ex.Message
        End Try
    End Sub

    Public Function access(ByVal requetesql As String) As DataSet
        Dim MyAdapter As OleDbDataAdapter = New OleDbDataAdapter
        Dim MyDataSet As DataSet = New DataSet("MesDonnées")
        Dim StrConnect As String
        Dim MyCommand As OleDbCommand
        Dim requete As String

        Try
            MyCommand = New OleDbCommand(requetesql, Connection)
            MyAdapter.SelectCommand = MyCommand
            MyDataSet.Clear()
            MyAdapter.Fill(MyDataSet, "fichier")
            'A ce niveau les donnes résultantes de la requete
            'se trouvent dans => MyDataSet.Tables(0)
            Return MyDataSet
        Catch ex As Exception
            lbPosition.Text = ex.Message
        End Try
    End Function

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Placez ici le code utilisateur pour initialiser la page
        If Not Page.IsPostBack Then
            connecter(Server.MapPath("DB\Base annuaire.mdb"))
            position = 0
            MyDataSet = access("select * from tblannu where fldnom like 'L%' order by fldNom")
            deconnecter()
            myDataView = New DataView(MyDataSet.Tables(0))
            myDataView.Sort = "fldNom"
            tbNom.Text = myDataView(0)("fldNom")
            tbPrenom.Text = myDataView(0)("fldPrenom")
            lbPosition.Text = "1/" & myDataView.Count
        End If
    End Sub

    Private Sub bDebut_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bDebut.Click
     Affichage(0)
    End Sub

    Private Sub bSuivant_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bSuivant.Click
        position = position + 1
        Affichage(position)
    End Sub

    Private Sub Affichage(ByVal i As Integer)
        tbNom.Text = myDataView(i)("fldNom")
        tbPrenom.Text = myDataView(i)("fldPrenom")
        lbPosition.Text = i + 1 & "/" & myDataView.Count
    End Sub

Le problème est que dès que je clique sur le bouton Suivant, j'ai un message "Détails de l'exception: System.NullReferenceException: La référence
d'objet n'est pas définie à une instance d'un objet."
En regardeant via l'"espion" myDataView est vide, quelqu'un peut me dire où est la grosse erreur ?

Merci pour tout aide que vous pourriez m'apporter.

6 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Bonjour,

quand tu click sur suivant ispostback sera vrai donc mydataview sera null d'ou l'exception :-/ pour cela il faut faire un

if page.ispostback then
mondataset = chargement du dataset
session("mondsamoi") = mondataset
else
mondataset = session("mondsamoi")
end if

si tu ne sauvegardes pas ton datast entre 2 passages tu ne vas pas pouvoir y acceder :-p il ne faut pas oublier qu'a chaque requete l'instance de la page est détruite ...

<hr />Cyril - MVS - MCP
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Chaque Thread est killé aprés la fin de la request tu peux donc pas avoir de variable global ...


Si tu veux pas mettre dans la session tu peux le mettre en variable application, cela sera partagé pour tous les users contrairement aux variables session.





<hr />

Cyril - MVS - MCP
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Application("TaVariable") = taVariable

on est pas obligé de les déclarer, faut juste vérifier qu'elle existe avant de les utiliser

<hr />Cyril - MVS - MCP
Messages postés
63
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 mai 2009

Merci de cette réponse rapide.

Comment dois je faire pour avoir des variables "à porter globale" comme en VB, sans utiliser les "session" ?
Car comme pour le Dataview, je veux conserver le variable "position"
Messages postés
63
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 mai 2009

Question de débutant : où déclare t'on les variables application ?
J'ai voulu le déclarer dans global.aspx, mais dans ce cas sur ma page la variable n'est pas reconnue.
Messages postés
63
Date d'inscription
mercredi 18 août 2004
Statut
Membre
Dernière intervention
19 mai 2009

Encore mille merci à jesusonline pour ces réponses rapides et précises qui m'aident à mieux comprendre le fonctionnement de asp.net.