IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Récupérer l'index d'un dataRow dans la lecture d'une DataTable


Sujet :

ASP.NET

  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Récupérer l'index d'un dataRow dans la lecture d'une DataTable
    Salut tout le monde

    Je suis un poil ennuyé parce que je sais que je l'ai déjà fait, mais je ne me souviens plus comment. Je sais que c'est une subtilité toute bête, mais trou de mémoire !!

    Alors faisons simple : j'ai une DataTable que je lis avec un For Each
    Au fur et à mesure de la lecture je sollicite une Function avec en paramettre l'Index de la DataRow actuelle.

    La dataTable est délcarée en variable de Classe. L'idée est d'envoyer l'index actuel pour que la Function retrouve la ligne de donnée et travail avec, tout simplement.

    Voici le squelette de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private dtProduit As DataTable
    
    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
            dtProduit = New DManager("DataDev").RetournerTable("EXEC dbo.BOUTIQUE_ListeProduit '" & mode & "'," & categ)
            ChargeTbl()
    
    Sub ChargeTbl()
            Dim r As TableRow
            For Each dr As DataRow In dtProduit.Rows
            r = New TableRow
            r.Cells.Add(RemplirCel(dtProduit.Rows.IndexOf(dtProduit.Rows.)))
            Next
        End Sub
        End Sub
    La partie en bleu est la partie où je sèche. Et donc, c'est bien l'index de la DataRow que je cherche pour faire dans ma Function un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Function RemplirCel(ByVal nr As Integer) As TableCell
            Dim lblNomProduit As New Label
            With lblNomProduit
                .Text = dtProduit.Rows(nr).Item("NomProduit")
            End With
            Dim c As New TableCell
            c.Controls.Add(lblNomProduit)
            Return c
     
        End Function
    Et ne pas a avoir à passer par une recherche sur une DataKeys ou un autre identifiant propre aux données.

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    dim index as integer = 0;
    for each
    ...
    index++
    next

  3. #3
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Par défaut
    Bonjour,

    Je vais peut-être dire une co***rie mais pourquoi ne pas tout simplement passer la datarow en paramètre d'entrée de ta fonction ?

  4. #4
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    C'est pas une connerie Ostenhard, c'est juste que ça sert à rien, tel que je vais programmer la suite, j'ai juste besoins de l'index pour éviter les trimballage de donnée. En fait, ma première Function va en appeller d'autre en dessous en leur refilant l'index, rien de plus. Elle n'utilise pas, de manière directe, les données. C'est pour ça que je veux me limiter. Je suis même à déclarer mon compteur avec un Int16 et pas un Integer pour économiser de la mémoire.

    Lutecefalco : dac pour le compteur, mais y a pas un truc plus "sexy" ?
    Genre un véritable index de DataRow à capter ?

    Parce que le compteur c'est ce que j'ai fais en attendant, mais c'est quand même moche je trouve.

  5. #5
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Passe par une boucle For, tu auras directement accès à ton index.

  6. #6
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Tu pense à un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For i As Integer = 0 To dtProduit.Rows.Count - 1
                        r = New TableRow
                        r.Cells.Add(RemplirCel(i))
                        tblCatalogue.Rows.Add(r)
    Next
    Je trouve que c'est toujours pas sexy, mais ça marche aussi. Alors la question est, si vraiment y a pas d'autre moyen : quelle solution est la moins couteuse en mémoire/ressource : le compteur ou la boucle For ?

    Je sais, je pinaille un peu, mais j'ai des envies d'optimisation en ce moment, certainement du au fait que j'optimise ma chasserresse sur WOW !!!!

    En tout cas merci pour les coups de mains.

Discussions similaires

  1. [QtGui] Récupérer l'index d'un QButtonGroup dans une autre classe
    Par aurelie.guegan.15 dans le forum PyQt
    Réponses: 0
    Dernier message: 26/11/2014, 12h01
  2. Réponses: 5
    Dernier message: 19/11/2009, 12h23
  3. Réponses: 5
    Dernier message: 11/05/2009, 14h10
  4. L'élément suivant dans la lecture d'une DataTable
    Par zooffy dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/07/2008, 14h33
  5. Récupérer l'index d'un enregistrement dans une table
    Par lolita4882 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/04/2008, 21h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo