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
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
Pour simplifier ma demade j'aiemrais savoir comme afficher une variable tableau sans passer par des response.Write
Merci
Salut,
Désolé c'est en vb mais la différence est faible ...
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()
Voila, j'espere avoir repondu a ta question
Greg.
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?
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
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
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?
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):
Lorsque tu parcours ton tableau à deux dimensions, tu créés une nouvelle instance de myArray et tu affectes les valeurs aux propriétés.Dim ma(toto.GetLength(0) - 1) As myArray
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...
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
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(); } }
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 ;-)
[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 ...
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?
Salut,
Pourrait tu nous ecrire le code que tu utilises pour executer ta requete, et construire ton tableau.
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; } } ...
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) ...
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.
Essai :
Greg.
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>
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
<asp:GridView ID="gridView1" runat="server" AutoGenerateColumns ="false"> ,
Et ca sera bon ...
Greg.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager