我可以编程将链接按钮添加到GridView吗?

3

我一直在查找类似的问题,但没有任何结果。我想要做的是,在某些项目中显示一个链接按钮,而在其他项目中显示一个超链接。这是我目前的代码:

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。目前,所有内容都正确显示,但链接按钮不会触发命令事件处理程序,并且在回发时所有控件都消失。

有任何想法吗?

3个回答

3

我认为你应该尝试在postback时强制重新绑定GridView。这将确保任何动态控件被重新创建并重新附加它们的事件处理程序。这也应该防止它们在postback后消失。

换句话说,在postback时调用DataBind()方法来重新绑定GridView。


谢谢您提供的解决方案!!!我刚刚花了大约一个小时研究这个相同的问题,看到了各种疯狂的建议解决方案......而这个解决方案只涉及在页面加载时删除is post back检查。 - Bryan Sebastian

1

您还可以在 Row_Created 事件中添加这些内容,这样就不必撤消 !PostBack 检查了


0
为什么不以声明方式创建按钮,以及使用文字控件以声明方式创建连字符,然后使用数据绑定语法,并根据需要将控件的可见性设置为true或false的Visible属性呢?
Visible='<%#((FileDirectoryInfo)Container.DataItem).Length == null) %>' 

类似这样的东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接