GridView RowCommand [Résolu]

giov0 8 Messages postés jeudi 16 mars 2006Date d'inscription 24 juillet 2006 Dernière intervention - 29 mai 2006 à 17:14 - Dernière réponse : fcampagne 195 Messages postés vendredi 3 juin 2005Date d'inscription 13 juillet 2006 Dernière intervention
- 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 ?
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
fcampagne 195 Messages postés vendredi 3 juin 2005Date d'inscription 13 juillet 2006 Dernière intervention - 30 mai 2006 à 09:23
3
Merci
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!

Merci fcampagne 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de fcampagne
Meilleure réponse
giov0 8 Messages postés jeudi 16 mars 2006Date d'inscription 24 juillet 2006 Dernière intervention - 31 mai 2006 à 08:57
3
Merci
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

 

Merci giov0 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de giov0
Meilleure réponse
fcampagne 195 Messages postés vendredi 3 juin 2005Date d'inscription 13 juillet 2006 Dernière intervention - 1 juin 2006 à 08:51
3
Merci
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!

Merci fcampagne 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de fcampagne
Meilleure réponse
fcampagne 195 Messages postés vendredi 3 juin 2005Date d'inscription 13 juillet 2006 Dernière intervention - 1 juin 2006 à 09:00
3
Merci
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!

Merci fcampagne 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de fcampagne

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.