我已经看过一些类似的问题没有任何运气。什么我想要做的就是有一个内这对于某些项目显示了linkbutton和其他项目显示了超链接。这是我目前有:

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

其中第一单元是一个TemplateField.目前,一切都显示正确,但linkbuttons不提高命令的事件的处理程序,以及所有的控制消失在回发。

任何想法?

有帮助吗?

解决方案

我觉得你应该试图强迫一个重绑定的内 回发。这将确保任何动态的控制是重建和他们的事件的处理程序的重新连接.这还应当防止他们失踪后回发。

IOW,呼叫 DataBind() 在内在回发。

其他提示

你还可以添加这些在Row_Created事件,然后您没有撤消!回复

为什么你不创建的按钮以声明的方式,并创建一个连字符声明的方式(使用的文字控制),然后使用数据结合的语法和组的可见性,是可见的财产的控制,真正的或虚假如需要:

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

类似的东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top