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 :

[C#] Affecter un tableau à un gridview


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Par défaut [C#] Affecter un tableau à un gridview
    Bonjour,

    Est t il possible de remplir une Gridview avec les éléments d'une variable tableau?

    Sinon comment peux t-on faire pour afficher le contenu d'un tablleau proprement sans passer par des response.write...

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Par défaut
    Pour simplifier ma demade j'aiemrais savoir comme afficher une variable tableau sans passer par des response.Write

    Merci

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            Dim toto() As String = {"test1", "test2", "test3"}
            gridView1.DataSource = toto
            gridView1.DataBind()
    Désolé c'est en vb mais la différence est faible ...

    Voila, j'espere avoir repondu a ta question

    Greg.

  4. #4
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Par défaut
    J'ai testé mais j'ai l'erreur suivante : Array was not a one-dimensional array mon tableau à deux dimensions cela ne marche pas avec?

  5. #5
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Par défaut
    En fait mon problème est le suivant :

    J'ai une requete SQL mais je dois transformer des données de celle ci. Je fais ma moulinette et j'affecte le résultat à un tableau à 2 dimensions.

    Quelle est la solution pour afficher ces données modifiées? Hormis passé par un parcours du tableau aevc response.write. J'aimerais utiliser la mise en forme des gridview

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Par défaut
    Il n'est pas possible, à ma connaissance, d'affecter comme datasource un array à 2 dimensions, donc je ne vois que cette solution, un peut plus longue (tu peux créer la classe myArray hors de ta page si tu as besoins régulierement de ce type de databind) :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Public Class _Default
        Inherits System.Web.UI.Page
     
        Partial Class myArray
     
            Private _x As String = String.Empty
            Private _y As String = String.Empty
     
            Public Property X() As String
                Get
                    Return _x
                End Get
                Set(ByVal value As String)
                    _x = value
                End Set
            End Property
     
            Public Property Y() As String
                Get
                    Return _y
                End Get
                Set(ByVal value As String)
                    _y = value
                End Set
            End Property
     
            Public Sub New()
                _x = String.Empty
                _y = String.Empty
            End Sub
        End Class
     
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim toto(,) As String = {{"test1", "1"}, {"test2", "2"}, {"test3", "3"}}
     
            Dim ma(toto.GetLength(0) - 1) As myArray
     
            For i As Integer = 0 To toto.GetLength(0) - 1
                Dim t As New myArray
                t.X = toto(i, 0)
                t.Y = toto(i, 1)
                ma(i) = t
            Next
     
            gridView1.DataSource = ma
            gridView1.DataBind()
     
        End Sub
    End Class

  7. #7
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Par défaut
    Merci,

    Mais je ne comprends pas bien ta classe comment crée tu ta variable ma? je ne vois pas ou tu lui dis qu'il faut lui mettre une taille?

  8. #8
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Par défaut
    La classe myArray représente un objet avec 2 propriétés (les deux dimensions du tableau et donc tes deux futures colonnes).
    La taille du tableau d'objet myArray est fixée par la longueur de la dimension 0 de ton tableau (qui représente concretement le nombre de ligne):
    Dim ma(toto.GetLength(0) - 1) As myArray
    Lorsque tu parcours ton tableau à deux dimensions, tu créés une nouvelle instance de myArray et tu affectes les valeurs aux propriétés.

    La méthode Databind t'afficheras autant de colonnes que de propriétés, donc si tu souhaites faire la même chose avec un tableau à trois dimensions il suffit de créer une nouvelle propriété à ta classe myArray, puis de lui affecter dans le foreach la valeur de la troisième dimension ... etc.

    Voila,

    Greg.

    PS : Si tu en as vraiment besoin, je pourrais prendre un peu de temps afin de te faire l'exemple en c#, mais étant donné que je suis moins à l'aise avec ce language, il me faut un peu plus de temps que j'en ai actuellement...

  9. #9
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Par défaut
    Pour le C#, je pense ne pas être très loin :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
     
    public partial class MaPage : System.Web.UI.Page
    {
        partial class myArray
        {
            private string _x = string.Empty;
            private string _y = string.Empty;
     
            public string X
            {
                get { return _x; }
                set { _x = value; }
            }
     
            public string Y
            {
                get { return _y; }
                set { _y = value; }
            }
     
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            string[,] toto = { { "test1", "1" }, { "test2", "2" }, { "test3", "3" } };
            int tableauLength = toto.GetLength(0) - 1;
            myArray[] ma = new myArray[tableauLength];
     
            for (int i = 0; i < toto.GetLength(0) - 1; i++)
            {
                myArray temp = new myArray();
                temp.X = toto[i, 0];
                temp.Y = toto[i, 1];
                ma[i] = temp;
            }
     
            gridView1.DataSource = ma;
            gridView1.DataBind();
        }
    }

  10. #10
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Par défaut
    Excuse moi c'est moi qui est rien compris!!! je comprenais pas que tu fesais un tableau de MyArray

    J'ai testé cela marche j'ai plus qu'a adapaté à ma situation.

    Merci ;-)

  11. #11
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Par défaut
    [LES REPONSES SE SONT CROISEES ... DSL]
    Pour la logique, effectivement l'objet myArray n'est pas un tableau mais représente uniqement une ligne de ton futur tableau avec 2 colonnes (je parle du résultat coté web, le tableau ...).

    Le principe est uniquement de créer un objet représentant un ensemble de valeurs liées entre elles, exemple :
    Considéront que ton tableau (coté web/interface) va représenter les élèves d'une classe (pour faire dans l'original). Tu souhaites affiché leurs nom, prénom et age. Ton tableau aura donc trois colonnes, nom, prénom et age (toujours coté web/interface).
    Considère donc l'objet myArray comme l'objet représentant un élève. Il aura donc trois propriétés : Nom, Prenom et Age (X, Y et Z, ou ce que tu veux)
    Une fois tes objets construit (les objet t dans le code exemple) tu obtient donc un "array" ou "tableau" d'objet myArray (ma dans l'exemple du code).
    La propriété DataSource de ton gridView aura comme valeur cet "array" d'objet Eleve (ma). Chaque ligne de ton tableau représentera un de ces objet (t), et chaque colonne, une des propriétés de l'objet, donc si tu as 8 eleves, tu auras 8 ligne et x colonnes (1 colonne par propriété).
    Désolé si je ne suis pas très clair ...

    Greg.

    PS : Il est vrai que le nom des objets ou variables n'ont pas été choisi idéalement ...

  12. #12
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Par défaut
    Ca marche bien j'ai crée mes classes et cela marche bien ds mon gridview. Par contre je n'arrive pas à maitriser l'ordre des colonnes. Sais tu comment faire?

  13. #13
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Par défaut
    Salut,
    Pourrait tu nous ecrire le code que tu utilises pour executer ta requete, et construire ton tableau.

  14. #14
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Par défaut
    J'ai repris ce que tu m'avais donné en y ajoutant des champs, j'ai beau mettre ds n'importe quel ordre cela me mets tjs le même ordre ( mais pas l'ordre que je veux)

    J'ai crée mon gridview en mode graphique.

    Je te mets mon code quand même

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     int tableauLength = i+1;
                myArray[] ma = new myArray[tableauLength];
     
                for (int z = 0; z < tableauLength; z++)
                {
                    myArray temp = new myArray();
     
                    temp.A = Tableau_Principal[z, 0];
                    temp.B = Tableau_Principal[z, 1];
                    temp.C= Tableau_Principal[z, 2];
                    temp.D= Tableau_Principal[z, 3];
                    temp.E= Tableau_Principal[z, 4];
                    temp.F = Tableau_Principal[z,5];
                    temp.G = Tableau_Principal[z,6];
                    temp.H = Tableau_Principal[z, 7];
                    temp.I= Tableau_Principal[z,8];
     
                    ma[z] = temp;
                }
     
                GrdView.DataSource = ma;
                GrdView.DataBind();
    ...
     
     
     public partial class myArray
        {
            private string _A = string.Empty;
            private string _B = string.Empty;
            private string _C = string.Empty;
            private string _D = string.Empty;
            private string _E = string.Empty;
            private string _F = string.Empty;
            private string _G = string.Empty;
            private string _H = string.Empty;
            private string _I = string.Empty;
     
            public string A
            {
                get { return _A; }
                set { _A = value; }
            }
     
    ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment affecter un tableau à un autre
    Par x-programer dans le forum C++
    Réponses: 5
    Dernier message: 23/10/2019, 18h04
  2. Réponses: 24
    Dernier message: 04/05/2007, 20h37
  3. [VBA-E] Affecter un tableau à une plage de cellules, serait-ce possible ?
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 08/02/2007, 12h59
  4. affecter un tableau à un autre
    Par pascaldengis dans le forum C
    Réponses: 2
    Dernier message: 23/11/2005, 17h54
  5. problème d'affectation de tableau ...
    Par Mike888 dans le forum C
    Réponses: 23
    Dernier message: 26/02/2005, 14h52

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