Pergunta

Eu estive olhando através de algumas perguntas semelhantes, sem qualquer sorte. O que eu gostaria de fazer é ter um gridview que para determinados itens mostra um LinkButton e para outros itens mostra um hiperlink. Este é o código que eu tenho atualmente:

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

, onde a primeira célula é um TemplateField. Atualmente, tudo exibe corretamente, mas os linkbuttons não elevam o manipulador de eventos de comando, e todos os controles desaparecem no postback.

Todas as idéias?

Foi útil?

Solução

Eu acho que você deveria tentar forçar um religar do GridView em cima postback. Isto irá assegurar que quaisquer controles dinâmicos são recriados e seus manipuladores de eventos recolocado. Isso também deve evitar o seu desaparecimento após a postagem.

IOW, DataBind() chamada no GridView mediante postagem.

Outras dicas

Você também pode adicioná-los em caso Row_Created e então você não precisa se desfazer cheque! PostBack

Por que você não criar o botão de forma declarativa, e criar o hypen declarativa (usando um controle literal) e, em seguida, usando dados sintaxe de ligação e definir a visibilidade que é propriedade Visible dos controles para verdadeiro ou falso, conforme necessário:

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

Algo assim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top