Frage

Ich habe ohne Erfolg einige ähnliche Fragen suchen durch. Was ich möchte, ist zu tun, um eine Gridview hat, die für bestimmte Produkte einen Linkbutton zeigt und für andere Elemente zeigt einen Hyperlink. Dies ist der Code, den ich derzeit haben:

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

, wo die erste Zelle ein Template ist. Derzeit alles korrekt angezeigt, aber die Linkbuttons erheben nicht den Befehl Ereignishandler, und alle Bedienelemente verschwinden auf Postbacks.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich glaube, Sie sollten versuchen, eine rebind des Gridview auf Postbacks zu zwingen. Dadurch wird sichergestellt, dass alle dynamischen Kontrollen werden neu erstellt und ihr Event-Handler wieder angenäht. Dies sollte auch ihr Verschwinden nach dem Postback verhindern.

IOW, ruft DataBind() auf dem Gridview auf Postbacks.

Andere Tipps

Sie können auch diese in dem Row_Created Ereignisse hinzufügen und dann müssen Sie nicht rückgängig gemacht werden! Postback Check

Warum nicht Sie die Schaltfläche deklarativ erstellen, und erstellen Sie den Bindestrich deklarativ (eine wörtliche Kontrolle verwendet wird) und dann die Daten unter Verwendung von Bindungssyntax und stellen Sie die Sichtbarkeit, die Visible-Eigenschaft der Steuerelemente zu wahr oder falsch ist, wie gebraucht:

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

So ähnlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top