GridView RowCommand

Résolu
giov0 Messages postés 8 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 24 juillet 2006 - 29 mai 2006 à 17:14
fcampagne Messages postés 195 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 13 juillet 2006 - 1 juin 2006 à 09:00
Bonjour,

J'ai une page (WebForm) dans laquelle je contrui dynamiquement un GridView
J'ai plusieurs TemplateField que je rempli avec des controls ImageButton
J'associe des CommandName pour chaque ImageButton (ex : delet,detail,doclies....)
Dans mon code behind j'ai l'evenement GridView1_RowCommand dans laquelle je fait un switch pour savoir d'ou viens le click.
Mon 1er probleme, c'est que l'evenement ne s'execute pas  si je charge mon gridview dans un block

if

(!Page.IsPostBack){

}

Si je charge mon gridview à l'exterieure de ce block,
l'evenement s'execute mais je n'arrive pas à recuperer les valeur de la ligne selectionnée dans mon gridview.(je suppose que c'est normal car le gridview a été réinitialisé) 

C'a fait une semaine que mon cerveau chauffe trop.
Est-ce kelkun voit où est mon erreur ?

4 réponses

fcampagne Messages postés 195 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 13 juillet 2006 3
30 mai 2006 à 09:23
Salut,
J'ai sensiblement le méme probléme en ce moment que toi!
A la différence que moi je crée mon gridview dynamiquement dans une classe a part que j'inclu dans ma page aspx par la suite
Pour ton premier pb, jesusonline ma filé un tuyot, regarde le cycle de déroulement d'une page asp, il semble qu'il faut déclarer ton gridview dynamique dans l'événement page_init de ta webform.
Essaye déja cet piste,
Par contre je suis curieux, pourrais tu me montrer comment tu ajoute des itemtemplate ( comment tu ajoute tes imagebutton en fait) avec les itemplate dans ton gridview dynamique stp!
3
giov0 Messages postés 8 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 24 juillet 2006
31 mai 2006 à 08:57
Ok
Voila le lien qui m'a permis de créér dynamiquement mes colonne avec des imagebutton :

http://www.c2i.fr/code.aspx?IDCode=633

En fait, le code est pour le controle DATAGRID mais voila mon code pour le GRIDVIEW :

Dans ma page où je construit mon GridView :

   //Déclaration d'un compteur pour l'index des colonnes

   int colIndex = 0 ;

   TemplateField coldelet =
new
TemplateField();
   coldelet.ItemTemplate =
new
MyTemplate(
"delet");
   GridView1.Columns.Insert(colIndex, coldelet);

La classe MyTemplate est : 

public

class
MyTemplate :
ITemplate
{

string type;

public MyTemplate(
string typ)
{
type = typ;
}

//methode appelée lors de l'implementation de la collone template
public
void InstantiateIn(
Control container)
{

   Control ctrl =
null;
   ctrl =
new
ImageButton();
   ((
ImageButton)ctrl).CommandName =
"cmd" + type;
   ((
ImageButton)ctrl).ImageUrl =
"~/Images/icone" + type +
".jpg";

   ((
ImageButton)ctrl).ToolTip = "ton tooltip";

  
 ctrl.ID = type;
   container.Controls.Add(ctrl);
}
}

Voila, normalement avec ca tu construit dynamiquement des templatefield avec des images button
Est-ce que tu peux m'envoyer ton code de construction de DATAGRID
j'aimerai savoir comment tu gere pour l'inclure dans ta page apres sa contruction ds une classe à part
je suis curieux aussi ;.)
Merci

 
3
fcampagne Messages postés 195 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 13 juillet 2006 3
1 juin 2006 à 08:51
Merci bien, j'avais vu également ce code au détour d'un page web ( dailleur je crois  que c le méme site) La question que je me pose ,c'est est ce qu'il ya un moyen de créer des Itemplate sans avoir recours a une classe externe comme toi ici tu utilise la classe mytemplate!
Je cherche a m'affranchir de toutes classes non vitales dans mon code
Merci!
3
fcampagne Messages postés 195 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 13 juillet 2006 3
1 juin 2006 à 09:00
voila pour mon code dans ma classe de création d'un gridview ( pareille qu'un dtagrid)

    Private Function setBoundField(ByVal name As String) As BoundField
'fonction qui créer une colonne type dans mon gridview
        Dim myboundfield As New BoundField
        myboundfield = New BoundField
        myboundfield.HtmlEncode = False
        myboundfield.DataField = name
        myboundfield.HeaderText = name
        Return myboundfield
    End Function

Public Function setAfficheur() As GridView

        With detail
            .ID = "afficheur_package"
            .CellPadding = "4"
            .Font.Name = "tahoma"
            .ForeColor = Drawing.ColorTranslator.FromHtml("#333333")
            .GridLines = GridLines.Both
            .Height = Web.UI.WebControls.Unit.Pixel(50)
            .Width = Web.UI.WebControls.Unit.Percentage(90.0)
            .HeaderStyle.HorizontalAlign = Web.UI.WebControls.HorizontalAlign.Center
            .HorizontalAlign = Web.UI.WebControls.HorizontalAlign.Center
            .RowStyle.BackColor = Drawing.ColorTranslator.FromHtml("#EFF3FB")
            .HeaderStyle.BackColor = Drawing.ColorTranslator.FromHtml("#507CD1")
            .HeaderStyle.Font.Bold = True
            .HeaderStyle.ForeColor = Drawing.Color.White
            .AlternatingRowStyle.BackColor = Drawing.Color.White
            .RowStyle.HorizontalAlign = HorizontalAlign.Center
            .AutoGenerateColumns = False

            addcolumn = New ButtonField()
            addcolumn.CommandName = "etat"
            addcolumn.DataTextField = "Temp"
            'association au champ 0 de ma table de données
            addcolumn.DataTextFormatString = "{0}"
            addcolumn.ButtonType = ButtonType.Link
            addcolumn.ItemStyle.Wrap = True
            .Columns.Add(addcolumn)

            .Columns.Add(setBoundField("Nom"))
            .Columns.Add(setBoundField("Chemin"))
            .Columns.Add(setBoundField("N° de processus"))
            .Columns.Add(setBoundField("Etat"))
            .Columns.Add(setBoundField("Status"))
             'gestion des evenement
            AddHandler .RowCommand, AddressOf serv_RowCommand
            AddHandler .RowCreated, AddressOf serv_RowCreated
        End With

        Return detail
    End Function

    Sub serv_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
        If e.CommandName = "etat" Then
            ....................mon code a executer sur le click du lien
    End Sub

    Sub serv_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
........................mon code a executer sur la création d'une ligne du gridview
    End Sub

Ensuite aprés tout ca dans ma page principale, je créer une instance de ma classe
dim classe as new  maclasse ( dans le page_init)
'et je récupére le gridview de ma classe ( je n'ai pas mis le code dans l'exemple pour récupérer le gridview mais c tout béte)
dim gv as new gridview
gv=classe.getgridview
'associer une source a mon gridview et affichage
gv.datasource=masource ( moi j'utilitlise un datatable)
gv.databind

Voila tout béte n'est ce pas!
3
Rejoignez-nous