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 :

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>
Mais comme mes colonnes sont construites dynamiquement je ne peux pas beneficier de cette ecriture dans la page aspx.

Du coup je passe par une classe comme suit :
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);
        }
 
 
    }
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...

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();
            }
        }
 
    }