【问题标题】:Can I programmatically add a linkbutton to gridview?我可以以编程方式将链接按钮添加到 gridview 吗?
【发布时间】:2009-06-24 16:32:35
【问题描述】:

我一直在寻找一些类似的问题,但没有任何运气。我想做的是有一个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。目前,一切都正确显示,但链接按钮不会引发 Command 事件处理程序,并且所有控件都会在回发时消失。

有什么想法吗?

【问题讨论】:

    标签: c# asp.net gridview templatefield


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的解决方案!!!我只花了大约一个小时用各种疯狂的提议解决方案研究同样的问题......而这个问题涉及简单地删除页面加载时的回发检查。
    【解决方案2】:

    您也可以在 Row_Created 事件中添加这些,然后您不必撤消 !PostBack 检查

    【讨论】:

      【解决方案3】:

      为什么不以声明方式创建按钮,以声明方式创建连字符(使用文字控件),然后使用数据绑定语法并根据需要将控件的 Visible 属性的可见性设置为 true 或 false:

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

      类似的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-19
        • 2013-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-24
        • 1970-01-01
        相关资源
        最近更新 更多