Domanda

Ho esaminato alcune domande simili senza fortuna. Quello che mi piacerebbe fare è avere una visualizzazione griglia che per alcuni elementi mostra un pulsante di collegamento e per altri elementi mostra un collegamento ipertestuale. Questo è il codice che ho attualmente:

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);
    }
}

dove la prima cella è un TemplateField. Attualmente, tutto viene visualizzato correttamente, ma i pulsanti di collegamento non aumentano il gestore eventi Command e tutti i controlli scompaiono al postback.

Qualche idea?

È stato utile?

Soluzione

Penso che dovresti provare a forzare un rebind del postback di GridView su . Ciò assicurerà che tutti i controlli dinamici vengano ricreati e i loro gestori di eventi ricollegati. Ciò dovrebbe anche impedire la loro scomparsa dopo il postback.

IOW, chiama DataBind () su GridView al postback.

Altri suggerimenti

Puoi anche aggiungerli nell'evento Row_Created e quindi non devi annullare! Controllo PostBack

Perché non si crea il pulsante in modo dichiarativo e si crea l'ipen in modo dichiarativo (usando un controllo letterale) e quindi si usa la sintassi di associazione dei dati e si imposta la visibilità che è la proprietà Visible dei controlli su true o false secondo necessità:

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

Qualcosa del genere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top