ASP.NET - bouton de visibilité changement de contrôle DetailsView HeaderTemplate pas de travail dans OnModeChanging gestionnaire
-
12-12-2019 - |
Question
J'ai cette balise:
<asp:DetailsView ID="dvDatabase" OnModeChanging="dvDatabase_ModeChanging">
<HeaderTemplate>
<asp:Button ID="btnView" runat="server" CausesValidation="False" CommandName="Cancel"
Text="View" CssClass="btn btn-primary" Visible="false" />
<asp:Button runat="server" CausesValidation="False" CommandName="Edit"
Text="Edit" CssClass="btn btn-success" ID="btnEdit" />
<asp:Button runat="server" CausesValidation="False" CommandName="Delete"
Text="Delete" CssClass="btn btn-danger" />
</HeaderTemplate>
...
Puis-je avoir ce C#:
protected void dvDatabase_ModeChanging(object sender, DetailsViewModeEventArgs e)
{
bool isEdit = DetailsViewMode.Edit == e.NewMode;
DetailsView view = (DetailsView)sender;
Button viewButton = (Button)view.FindControl("btnView");
Button editButton = (Button)view.FindControl("btnEdit");
viewButton.Visible = isEdit;
editButton.Visible = !isEdit;
}
J'ai fait un peu de débogage et l' Visible
la propriété est défini correctement, mais je ne vois jamais de boutons de changement.J'ai touché le bouton Modifier et je suis en mode édition, mais le bouton Modifier est toujours affiché et le bouton d'Affichage est toujours caché.J'ai essayé de trouver les boutons via dvDatabase.FindControl
directement, plutôt que d'utiliser les object sender
variable, mais cela ne fonctionne pas non plus.J'ai essayé de consulter les boutons avec des variables sur la base des ID
attribut dans la balise, mais btnView
et btnEdit
variables/propriétés n'existent pas.Ce qui se passe?
Edit: Je suis passé à OnModeChanged
comme par Tim suggestion, mais les boutons ne changent pas.Voici mon C# maintenant:
protected void dvDatabase_ModeChanged(object sender, EventArgs e)
{
DetailsView view = /*(DetailsView)sender*/dvDatabase;
bool isEdit = DetailsViewMode.Edit == view.CurrentMode;
LinkButton viewButton = (LinkButton)view.FindControl("btnView");
LinkButton editButton = (LinkButton)view.FindControl("btnEdit");
viewButton.Visible = isEdit;
editButton.Visible = !isEdit;
}
J'ai essayé d'utiliser la object sender
ainsi que le dvDatabase
variable de classe, mais aucun ne semblait avoir un effet.
La solution
L'utilisation de la DetailsView
's DataBound
de l'événement au lieu et à seulement databind DetailsView if(!Page.IsPostback)
.Vous devez également gérer l' ItemCommand
manifestation pour appeler les ChangeMode
méthode et databind l' DetailsView
.
protected void dvDatabase_DataBound(Object sender, EventArgs e)
{
var view = (DetailsView)sender;
var btnView = (Button)view.FindControl("btnView");
var btnEdit = (Button)view.FindControl("btnEdit");
switch (view.CurrentMode)
{
case DetailsViewMode.ReadOnly:
btnView.Visible = false;
btnEdit.Visible = true;
break;
case DetailsViewMode.Edit:
btnView.Visible = true;
btnEdit.Visible = false;
break;
case DetailsViewMode.Insert:
btnView.Visible = false;
btnEdit.Visible = false;
break;
default:
break;
}
}