Cic*_*ami 6 asp.net gridview hyperlink rowdatabound
我有一个ASP.NET Web窗体应用程序.在我的应用程序中,我有一个可以顺利运行的GridView.我有几个文本字段,最后一个是<asp:hyperlinkfield>.
现在我想通过放置一个简单的链接而不是在hyperlinkfield满足特定条件的情况下以编程方式更改字段.所以我抓住了这个onRowDataBound事件:
Sub myGridView_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles myGridView.RowDataBound
If (condition) Then
Dim link = New HyperLink()
link.Text = "login"
link.NavigateUrl = "login.aspx"
e.Row.Cells(3).Controls.Add(link)
End If
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
其中nhyperlinkfield是放置的单元格.使用此代码,它只是增加hyperlinkfield了新的代码link.我怎样才能更换它?
PS:代码在VB6中,但我是C#程序员,接受两种语言的答案
在这种情况下,我通常将绑定字段转换为模板化字段.
<asp:TemplateField HeaderText="Title" SortExpression="Title">
<ItemTemplate>
<asp:HyperLink ID="TitleHyperLink" runat="server" ></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)
并在代码隐藏中完成剩下的工作.
protected void grid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var link = (HyperLink)e.Row.FindControl("TitleHyperLink");
if (link != null)
{
if (condition)
{
link.Text = "login";
link.NavigateUrl = "login.aspx";
}
else
{
link.Text = "default text";
link.NavigateUrl = "default.aspx";
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在添加新控件之前,从集合中删除要替换的控件:
protected void TestGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
HyperLink newHyperLink = new HyperLink();
newHyperLink.Text = "New";
e.Row.Cells[3].Controls.RemoveAt(0);
e.Row.Cells[3].Controls.Add(newHyperLink);
}
}
Run Code Online (Sandbox Code Playgroud)
但我同意其他人的意见,只需更改现有链接的属性:
protected void TestGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
HyperLink link = e.Row.Cells[0].Controls[0] as HyperLink;
if (link != null)
{
link.Text = "New";
link.NavigateUrl = "New";
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20795 次 |
| 最近记录: |