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 :

GridView + TemplateField + Eval : Je craque !


Sujet :

ASP.NET

  1. #1
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 29
    Par défaut GridView + TemplateField + Eval : Je craque !
    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();
                }
            }
     
        }

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    581
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Par défaut
    Dans la class ImgButton, il n'y aurait pas moyen de créer une propriété, via laquelle tu passerais un string ou un idéntifiant permettant de définir l'image ?

    Fix

  3. #3
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 29
    Par défaut
    Mon probleme est que je ne sais qu'a l'execution (quand je connais la valeur de la cellule) ce que doit etre l'image.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Février 2007
    Messages : 62
    Par défaut
    // Comment faire pour que le imgButton soit customise en fonction de la valeur de certains champs de MonObjetDansLaCellule ?????
    Tu connais d'avance la liste des valeurs possiblent ?
    Tu veux customiser quoi exactement ? Juste l'url de l'image ?

  5. #5
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Tu peux faire ça par code dans le OnItemDataBound de ta Grid...

  6. #6
    Membre averti
    Inscrit en
    Octobre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 29
    Par défaut
    Bon j'ai reussi à customise les cellules de mon grid view en creant une classe héritant de ITemplate.

    voici le code de cette classe :
    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
    57
    58
    59
    60
     
    public class ImgButton : ITemplate
        {
            private readonly string columnName;
     
            private ImageButton imgButton;
     
            public ImgButton(string perimeterEnumStringValue)
            {
                columnName = perimeterEnumStringValue;
            }
     
            public void InstantiateIn(Control container)
            {
                imgButton = new ImageButton();
                imgButton.DataBinding += BuildImgButton;
                container.Controls.Add(imgButton);
            }
     
            private void BuildImgButton(object sender, EventArgs e)
            {
                ImageButton img = (ImageButton) sender;
                GridViewRow grv = (GridViewRow) img.NamingContainer;
                DataRowView drv = (DataRowView) grv.DataItem;
     
                object cellData = drv[columnName];
     
                if (cellData as WebSourceData != null)
                {
                    WebSourceData s1 = (WebSourceData)cellData;
     
                    if (StringEnum.GetStringValue(s1.Perimeter).Equals(columnName))
                    {
                        img.ImageUrl = ChooseImage(s1.Status);
                        img.CommandArgument = s1.SourceID.ToString();
                        img.CommandName = s1.SourceID.ToString();
                        img.Command += PerimeterPage.Toto;
                    }
                }else
                {
                    img.ImageUrl = "~/images/pixel.gif";
                }
            }
     
            private static string ChooseImage(StatusEnum status)
            {
                string result = "";
     
                if (status == StatusEnum.FINISHED)
                {
                    result = "~/images/1.gif";
                }
                else if (status == StatusEnum.FAILED)
                {
                    result = "~/images/2.gif";
                }
     
                return result;
            }
        }
    Tout fonctionne bien pour l'affichage.
    Sauf que quand je clique sur mon image je suis cense appele Perimeter.Toto
    Hors l'evenement n'est jamais appele

    Qq sait il pourquoi

Discussions similaires

  1. GridView : Eval et esperluette
    Par sovitec dans le forum ASP.NET
    Réponses: 4
    Dernier message: 26/11/2008, 14h14
  2. Réponses: 4
    Dernier message: 17/09/2008, 18h05
  3. Réponses: 2
    Dernier message: 11/02/2008, 10h37
  4. images, gridview et Eval
    Par tbess dans le forum ASP.NET
    Réponses: 4
    Dernier message: 31/08/2007, 17h02
  5. GridView et TemplateField
    Par picolo5 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 15/02/2007, 15h13

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