Bonjour à tous,
Voici mon probleme ( et le code suit )
Je cree un GridView qui s'alimente à partir d'un DataTable.
Mon DataTable contient plusieurs colonnes.
La premiere est de type int.
Les autres sont de type une classe que j'ai créée.
Pour les colonnes qui sont de type la classe que j'ai cree, je veux avoir une image qui s'affiche en fonction de la valeur d'un champ de cette classe.
Si je connaissais par avance le nombre de colonne je pourrais faire dans la page aspx une déclaration ressemblant à cela :
Mais comme mes colonnes sont construites dynamiquement je ne peux pas beneficier de cette ecriture dans la page aspx.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <ItemTemplate> <asp:ImageButton ID="ImgId" ImageUrl='<%# ChoosePictureContainer.DataItem,"JobStatus") %>' runat="server" /> </ItemTemplate>
Du coup je passe par une classe comme suit :
Mon probleme est que je ne vois pas comment gerer le champ ImageUrl en fonction de la valeur de mon objet dans la cellule car je ne vois pas comment acceder à la valeur de la cellule...
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 public class ImgButton : ITemplate { private ImageButton imgButton; public void InstantiateIn(Control container) { imgButton = new ImageButton(); imgButton.ID = "id"; imgButton.ImageUrl = "~/images/finished.gif"; imgButton.CommandName = "SELECT"; container.Controls.Add(imgButton); } }
Voici le code epure du code behind de la page
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
51
52
53
54
55
56 public partial class IntegratedPerimeter : Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataTable dt = new DataTable(); DataColumn dcolDate = new DataColumn("Date", typeof (int)); dt.Columns.Add(dcolDate); IList<MaColonneData> mesColonnes = MaColonneDataManager.FindAll(); foreach (MaColonneData data in mesColonnes) { DataColumn dcol = new DataColumn(data.idx, typeof(MonObjetDansLaCellule)); dt.Columns.Add(dcol); } /* Remplissage des rows de la DataTable la DataRow a la structure suivante : drow["Date"] est un int drow[data.idx] est un objet "MonObjetDansLaCellule" */ foreach (DataColumn col in dt.Columns) { if (col.ColumnName == "Date" ) { BoundField bfield = new BoundField(); bfield.HeaderText = col.ColumnName; bfield.DataField = col.ColumnName; MonGridView.Columns.Add(bfield); } else { TemplateField tField = new TemplateField(); tField.HeaderText = col.ColumnName; ITemplate imgButton = new ImgButton(); tField.ItemTemplate = imgButton; MonGridView.Columns.Add(tField); // Comment faire pour que le imgButton soit customise en fonction de la valeur de certains champs de MonObjetDansLaCellule ????? } } //Initialize the DataSource MonGridView.DataSource = dt; //Bind the datatable with the GridView. MonGridView.DataBind(); } } }
Partager