我一直在寻找一些类似的问题而没有任何运气。我想做的是有一个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事件处理程序,并且所有控件都会在回发时消失。
有什么想法吗?
答案 0 :(得分:3)
我认为你应该尝试在回发时强制重新绑定GridView 。这将确保重新创建任何动态控件并重新附加其事件处理程序。这也应该可以防止它们在回发后消失。
IOW,在回发时在GridView上调用DataBind()
。
答案 1 :(得分:1)
你也可以在Row_Created事件中添加这些,然后你不必撤消!PostBack check
答案 2 :(得分:0)
为什么不以声明方式创建按钮,并以声明方式创建hypen(使用文字控件),然后使用数据绑定语法,并根据需要将控件的Visible属性的可见性设置为true或false:
Visible='<%#((FileDirectoryInfo)Container.DataItem).Length == null) %>'
类似的东西。