动态超链接在网格视图中不可见

本文关键字:视图 超链接 网格 动态 | 更新日期: 2023-09-27 17:59:57

我试图使用下面的代码在动态网格视图的每一行上显示动态超链接,但它没有显示超链接。

gvdates.DataSource = xyz;
var m = tool.ToolsID;
HyperLink hp = new HyperLink();
hp.Text = e.Row.Cells[i].Text;
hp.NavigateUrl = "~/OutageInfo.aspx?name=m;" + hp.Text;
e.Row.Cells[i].Controls.Add(hp);
gvdates.DataBind();
e.Row.Cells[i].Controls.Add(gvdates);

动态超链接在网格视图中不可见

您应该在RowCreated而不是RowDataBound中创建动态控件,因为此事件在每次回发时都会触发,而RowDataBound只有在GridView数据绑定到其DataSource时才会触发。

动态创建的控件必须在每次回发时使用与以前相同的ID重新创建,然后它们才能在ViewState中保留其值,事件才能正确激发。

因此,您应该在RowCreated中创建它们,并在RowDataBound中"填充"它们(例如,HyperLink的NavigateUrl,如果它来自数据源)。

但是,您应该在数据绑定GridView之后添加动态控件。所以这似乎毫无意义(不管e是什么):

e.Row.Cells[i].Controls.Add(hp);
gvdates.DataBind();