Basculer entre mode insertion et mode édition dans un detailsView

Résolu
coccolata Messages postés 86 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 26 mai 2010 - 7 mars 2009 à 14:11
RougailSaucisse Messages postés 118 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 décembre 2010 - 9 mars 2009 à 11:21
salut à tous,
j'ai un gridview, en selectionnant une ligne j'aurai les details chargés dans un detailsview
mon details view est par defaut en mode insertion je veux basculer en mode édition soit en selectionnant une ligne du gridview soit en cliquant sur annuler (dans le detailsview)
j'arrive pas a comprendre pourquoi la basculement entre les 2 modes tantot fonctionne et tantot ne fonctionne pas
en faisant le debug ligne par ligne ça passe par les methodes...
voici un bout de code:


protected
void DetailsView1_ItemCommand(
object sender,
DetailsViewCommandEventArgs e)


{


DetailsView1.DefaultMode = DetailsViewMode.Insert;


 





}


protected
void DetailsView1_ModeChanging(
object sender,
DetailsViewModeEventArgs e)


{






















DetailsView

dv = sender


as





DetailsView

;



 








if

(DetailsView1.CurrentMode ==


DetailsViewMode

.Insert){

dv.ChangeMode(



DetailsViewMode

.Edit);Calendar1.Enabled=



false

;

}



else


{


dv.ChangeMode(





DetailsViewMode

.Insert);Calendar1.Enabled=



true

;









}}

6 réponses

coccolata Messages postés 86 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 26 mai 2010
9 mars 2009 à 10:26
ah si, j'ai oublié de mettre le nouveau code:

protected

void DetailsView1_ModeChanging(
object sender,
DetailsViewModeEventArgs e){

DetailsView dv = sender
as
DetailsView;

if (DetailsView1.CurrentMode ==
DetailsViewMode.Insert){

dv.ChangeMode(

DetailsViewMode.Edit);DetailsView1.DataBind();
Calendar1.Enabled false;DetailsView1.HeaderText

"Mode Edition";

 

}

else{

dv.ChangeMode(

DetailsViewMode.Insert);DetailsView1.DataBind();
Calendar1.Enabled true;DetailsView1.HeaderText

"Mode Insertion";

}
3
RougailSaucisse Messages postés 118 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 décembre 2010 1
9 mars 2009 à 05:11
Salut,

si tu as ton mode par defaut en "Insert" cela aura pour effet de retourner a "Insert" apres un update ou insert. Or toi tu souhaiterais etre en update apres un click sur annuler si je comprends bien.
Je te propose une méthode, je ne pense pas que c'est la meilleure et ca serait d'ailleurs bien que quelqu'un d'autre propose une methode peut-etre plus "propre" mais bon en attendant cela devrait fonctionner je pense (je n'ai pas mis les Calendar.Enabled et tout mais tu peux adapter cela facilement je pense:

//a la selction d'un item de ta gridview
protected void myGridview_SelectedIndexChanged(object sender, EventArgs e)
{
...
myDetailView.ChangeMode(DetailsViewMode.Edit);
myDetailView.DataBind();
}

//click sur un bouton de ta detailsview
protected void myDetailView_ItemCommand(object sender, DetailsViewCommandEventArgs e)
{
    if (e.CommandName == "Cancel")
   {
        myDetailView.DefaultMode = DetailsViewMode.Edit;
        myDetailView.ChangeMode(DetailsViewMode.Edit);
   }
}

//au changement de mode
protected void myDetailView_ModeChanging(object sender, DetailsViewModeEventArgs e)
{
    myDetailView.ChangeMode(e.NewMode);
    dvDataBind(); //fonction de binding de ta detailsview
}

Voila, pas parfait je sais bien car il faudra en plus penser a rechanger le DefaultMode en Insert apres je ne sais quelle opération, mais bon si quelqu'un sait comme résoudre ceci plus proprement n'hesitez pas!
0
coccolata Messages postés 86 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 26 mai 2010
9 mars 2009 à 10:00
merci bien pour ton aide, mais en attendant ta réponse j'ai  fait quelques réctifications sur ma méthode et tout fonctionne bien: en fait sur dans DetailsView1_ModeChanging
    j'ai oublié de faire detailsView1.Databind()
je pense que aussi la tienne fonctionne.mnt la basculement entre les 2 modes est correcte
seulement dans le mode insert j'ai encore la ligne du gridview sélectionnée, comment je dois faire pour la déselectionner?

merci encore une autre fois
0
RougailSaucisse Messages postés 118 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 décembre 2010 1
9 mars 2009 à 10:56
ok très bien alors :)

et euh si tu veux deselectionner la ligne de ta gridview je pense qu'il suffit de faire un gridview.SelectedIndex = -1 puis de rebind la gridview.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coccolata Messages postés 86 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 26 mai 2010
9 mars 2009 à 11:09
j'ai testé :)
ça fonctionne, mais y a pas besoin de faire encore gridview1.Databind()
il suffit de de faire gridview.selectedindex=-1 et tout ça marche !(avec le databind le gridview disparait ;)  )
0
RougailSaucisse Messages postés 118 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 décembre 2010 1
9 mars 2009 à 11:21
ok tant mieux alors (normal que ca disparaise, quand je disais databind c'etait de ta fonction de binding donc je parlais pas la methode DataBind de la gridview directement, car evidemment ton datasource n'est plus definie puisque tu le fais en codebehind dans le pageload).
Mais bon si cela fonctionne sans avoir a rebind alors tant mieux ^^
0
Rejoignez-nous