ASP.NET - bouton de visibilité changement de contrôle DetailsView HeaderTemplate pas de travail dans OnModeChanging gestionnaire

StackOverflow https://stackoverflow.com//questions/10692300

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.

Était-ce utile?

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;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top