giov0
Messages postés8Date d'inscriptionjeudi 16 mars 2006StatutMembreDernière intervention24 juillet 2006
-
29 mai 2006 à 17:14
fcampagne
Messages postés195Date d'inscriptionvendredi 3 juin 2005StatutMembreDernière intervention13 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 ?
fcampagne
Messages postés195Date d'inscriptionvendredi 3 juin 2005StatutMembreDernière intervention13 juillet 20063 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!
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
fcampagne
Messages postés195Date d'inscriptionvendredi 3 juin 2005StatutMembreDernière intervention13 juillet 20063 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!
fcampagne
Messages postés195Date d'inscriptionvendredi 3 juin 2005StatutMembreDernière intervention13 juillet 20063 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
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