我有一个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
其中 n 是放置hyperlinkfield
的单元格。使用此代码,只需添加hyperlinkfield
新link
。我该如何更换它?
PS:代码在VB6中,但我是C#程序员,接受两种语言的答案
答案 0 :(得分:7)
在这种情况下,我通常会将绑定字段转换为模板化字段。
<asp:TemplateField HeaderText="Title" SortExpression="Title">
<ItemTemplate>
<asp:HyperLink ID="TitleHyperLink" runat="server" ></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
在代码隐藏中完成剩下的工作。
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";
}
}
}
}
答案 1 :(得分:6)
在添加新控件之前,从集合中删除要替换的控件:
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);
}
}
但我同意其他人的意见,只需更改现有链接的属性:
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";
}
}
}
答案 2 :(得分:1)
此时不要创建新链接,而是抓取已经作为字段一部分生成的链接。
If (e.Row.RowType = DataControlRowType.DataRow) Then
Dim link = e.Row.Cells(3).Controls(0)
link.Text = "login"
link.NavigateUrl = "login.aspx"
End If
编辑:已添加If阻止项目行外的操作。
答案 3 :(得分:1)
您可以在aspx文件中执行此操作:
<asp:HyperLink Text='<%# condition ? "TextIfTrue" : "TextIfFalse" %>' NavigateUrl='<%# condition ? "UrlIfTrue" : "UrlIfFalse" %>' />
或投你的
e.Row.Cells(3).Controls(0)
进入超链接并更改其值。
答案 4 :(得分:0)
您可以在aspx中使用:
<asp:HyperLink ID="HyperLink1" CssClass="exercise" runat="server" NavigateUrl="#">Search ¡here!</asp:HyperLink>
在代码隐藏中: 您还可以使用方法:
public string SharePoint(string x)
{
string page1, page2;
if (x== "1")
{
string page1="http://nwpage/files.zip";
return page1;
}
else
{
string page2="http://example2.aspx";
return page2;
}
}
如果我在其他方法或页面加载中调用控件,则可以使用路径
添加HyperLink1 string path= SharePoint(x);
HyperLink1.NavigateUrl = path;