6

我有一个 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#程序员,两种语言的答案都可以接受

4

5 回答 5

7

在添加新控件之前从集合中删除要替换的控件:

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";
    }
  }
}
于 2012-02-29T15:49:39.367 回答
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";
            }
        }
    }
}
于 2012-02-29T16:07:59.437 回答
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 块以避免在项目行之外执行操作。

于 2012-02-29T15:43:02.697 回答
1

您可以在您的 aspx 文件中执行此操作:

<asp:HyperLink Text='<%# condition ? "TextIfTrue" : "TextIfFalse" %>' NavigateUrl='<%# condition ? "UrlIfTrue" : "UrlIfFalse" %>' />

或投下你的

e.Row.Cells(3).Controls(0)

进入超链接并更改其值。

于 2012-02-29T15:46:48.230 回答
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;
于 2017-03-18T21:50:58.227 回答