C# 我可以通过编程方式将linkbutton添加到gridview吗?

C# 我可以通过编程方式将linkbutton添加到gridview吗?,c#,asp.net,gridview,templatefield,C#,Asp.net,Gridview,Templatefield,我一直在研究一些类似的问题,但运气不好。我想做的是有一个gridview,对于某些项目显示一个链接按钮,对于其他项目显示一个超链接。这是我目前拥有的代码: public void gv_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { var data = (FileDirectoryInfo)e.Row.

我一直在研究一些类似的问题,但运气不好。我想做的是有一个gridview,对于某些项目显示一个链接按钮,对于其他项目显示一个超链接。这是我目前拥有的代码:

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不会引发命令事件处理程序,所有控件在回发时都会消失


有什么想法吗?

我认为您应该尝试在回发时强制重新绑定GridView。这将确保重新创建任何动态控件并重新连接它们的事件处理程序。这也可以防止它们在回发后消失


现在,回发时在GridView上调用
DataBind()

为什么不声明性地创建按钮,声明性地创建hypen(使用文字控件),然后使用数据绑定语法,并根据需要将控件的visibility that Visible属性设置为true或false:

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

诸如此类。

您也可以将这些添加到创建的行事件中,然后您就不必撤消!回发检查

感谢您提供此解决方案!!!我只花了大约一个小时的时间研究这个问题,提出了各种疯狂的解决方案。。。这一步只需要删除页面加载上的is回发检查。