我可以以编程方式向gridview添加链接按钮吗?

时间:2009-06-24 16:32:35

标签: 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.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事件处理程序,并且所有控件都会在回发时消失。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

类似的东西。