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

  1. #1
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    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 du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    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 du Club
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 44
    Points
    44
    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 du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    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 du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    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 du Club
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 44
    Points
    44
    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 du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    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 du Club
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 44
    Points
    44
    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 du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    Il y a surement quelques chose qui m'échappe mais MyArray represente un objet avec 2 paramètres ( X et Y), je ne vois pas a quel moment c'est un tableau a part qu'il a le nom de Array mais a part ca.

    Je suis d'accord avec la déclaration de t mais ma ne serait t il pas un ArrayList plutot?


    Je ne comprends pas pourquoi cette solution marcherais car tu remplaces un tableau par un autre.

    Mais ta solution est peut etre bonne, mais je comprends vraiment pas.

    En plus mon tableau à 9 colonnes ;-)

    Mais merci en tout cas, et si tu peux m'expliquer ta logique ca m'aiderait grandement

  10. #10
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 44
    Points
    44
    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();
        }
    }

  11. #11
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    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 ;-)

  12. #12
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 44
    Points
    44
    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 ...

  13. #13
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    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?

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

  15. #15
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    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; }
            }
     
    ...

  16. #16
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 44
    Points
    44
    Par défaut
    C'est ta requete qui doit effectuer un order by en fonction de ton tri.
    1ere étape:
    Indique coté aspx une valeur pour chaque template (colonne) à la propriété "SortExpression".
    2eme étape:
    Sur l'event Onsorting, récupere la valeur via e.SortExpression.
    3eme étape:
    Rebind ton gridview après avoir executer ta requete sql avec le bon "order by" (En fonction de ton sortexpression).

    Greg.

    ps :Si ton tableau à x dimen. n'est utilisé que pour binder ton gridview tu peux créer tes objets "myArray" directement dans ta fonction qui execute ta requete (au lieu de crée ton tableau a x dimension) ...

  17. #17
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    ce n'est pas un problème d'ordre d'enregistrements que j'ai mais plutot un problème d'ordre de colonne au lieu d'avoir ds l'ordre A,B,C j'ai B,C,A.

  18. #18
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 44
    Points
    44
    Par défaut
    Essai :
    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
    <asp:GridView ID="gridView1" runat="server"> 
                <Columns>
                    <asp:templatefield  SortExpression="FlagSort1" HeaderText="NomColonne1">
                        <itemtemplate>
                            <%#DataBinder.Eval(Container.DataItem, "LE_NOM_DE_LA_PROPRIETE1")%>
                        </itemtemplate>
                    </asp:templatefield>
                </Columns>
                <Columns>
                    <asp:templatefield  SortExpression="FlagSort2" HeaderText="NomColonne2">
                        <itemtemplate>
                            <%#DataBinder.Eval(Container.DataItem, "LE_NOM_DE_LA_PROPRIETE2")%>
                        </itemtemplate>
                    </asp:templatefield>
                </Columns>
                <Columns>
                    <asp:templatefield  SortExpression="FlagSort3" HeaderText="NomColonne3">
                        <itemtemplate>
                            <%#DataBinder.Eval(Container.DataItem, "LE_NOM_DE_LA_PROPRIETE3")%>
                        </itemtemplate>
                    </asp:templatefield>
                </Columns>
            </asp:GridView>
    Greg.

  19. #19
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    OK ca fonctionne bien comme cela, sauf que j'ai mes colonnes en doubles, ds un premier tps ds l'ordre que j'ai défini et ensuite ds l'ancien ordre

  20. #20
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 44
    Points
    44
    Par défaut
    <asp:GridView ID="gridView1" runat="server" AutoGenerateColumns ="false"> ,

    Et ca sera bon ...

    Greg.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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