Question

J'ai parcouru des questions similaires sans aucune chance. Ce que j'aimerais faire, c'est avoir un gridview qui, pour certains éléments, montre un lien, et pour d'autres, un hyperlien. C'est le code que j'ai actuellement:

public void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var data = (FileDirectoryInfo)e.Row.DataItem;
        var img = new System.Web.UI.HtmlControls.HtmlImage();
        if (data.Length == null)
        {
            img.Src = "/images/folder.jpg";
            var lnk = new LinkButton();
            lnk.ID = "lnkFolder";
            lnk.Text = data.Name;
            lnk.Command += new CommandEventHandler(changeFolder_OnCommand);
            lnk.CommandArgument = data.Name;
            e.Row.Cells[0].Controls.Add(lnk);
        }
        else
        {
            var lnk = new HyperLink();
            lnk.Text = data.Name;
            lnk.Target = "_blank";
            lnk.NavigateUrl = getLink(data.Name);
            e.Row.Cells[0].Controls.Add(lnk);
            img.Src = "/images/file.jpg";
        }
        e.Row.Cells[0].Controls.AddAt(0, img);
    }
}

où la première cellule est un TemplateField. Actuellement, tout s’affiche correctement, mais les boutons de liaison ne déclenchent pas le gestionnaire d’événements Command et tous les contrôles disparaissent lors de la publication.

Des idées?

Était-ce utile?

La solution

Je pense que vous devriez essayer de forcer un rapprochement de la publication GridView sur . Cela garantira que tous les contrôles dynamiques sont recréés et que leurs gestionnaires d'événements sont rattachés. Cela devrait également empêcher leur disparition après publication.

IOW, appelez DataBind () sur le GridView lors de la publication.

Autres conseils

Vous pouvez également les ajouter à l'événement Row_Created sans avoir à annuler! Contrôle post-retour

Pourquoi ne créez-vous pas le bouton de manière déclarative et créez-vous l'hypen de manière déclarative (à l'aide d'un contrôle littéral), puis à l'aide de la syntaxe de liaison de données et définissez la visibilité de la propriété Visible des contrôles sur true ou sur false selon les besoins:

Visible='<%#((FileDirectoryInfo)Container.DataItem).Length == null) %>' 

Quelque chose comme ça.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top