0

你好我的问题是我在网格视图中有一个名为 TweetText 的列,它总是有一个 Url。我想将该 URl 设置为可点击的链接。我设法在页面加载时做到了这一点。但是当我更改网格的页码时,TweetText 的文本保持不变,即不变。在这里写我的代码。我也在 GridView1_PageIndexChanged 上执行此代码。但没有任何帮助。还有一件事是我不想让整个专栏都有一个链接。我只想将列中的 URL 作为链接

if (!Page.IsPostBack)
            {
                for (int i = 0; i < GridView1.Rows.Count; i++)
                {
                    GridViewRow row = GridView1.Rows[i];
                    String Url = SmartyPlants.Classes.TwitterData.GetUrlStrings(row.Cells[5].Text);
                    bool Check = SmartyPlants.Classes.TwitterData.IsUrlValid(Url);
                    int Index = Url.IndexOf(" ");
                    if (Url.Contains(" "))
                    {
                        Url = Url.Remove(Index);
                    }
                    String link = MakeLink(Url);
                    row.Cells[5].Text = row.Cells[5].Text.Replace(Url, link);
                }
            }
public static string MakeLink(string txt)
        {
            Regex regx = new Regex("http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", RegexOptions.IgnoreCase);

            MatchCollection mactches = regx.Matches(txt);

            foreach (Match match in mactches)
            {
                txt = txt.Replace(match.Value, "<a href='" + match.Value + "'>" + match.Value + "</a>");
            }
public static bool IsUrlValid(string url)
        {
            return Regex.IsMatch(url, @"(http|https)://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?");
        }
        public static string GetUrlStrings(string text)
        {
            MatchCollection ms = Regex.Matches(text, @"(www.+|http.+)([\s]|$)");
            string testMatch = ms[0].Value.ToString();
            return testMatch;
        }

            return txt;
        }
4

2 回答 2

1

如果您已经有数据,为什么不在HyperLinkgridview 中使用控件并使用?Eval()

<asp:TemplateField>
    <ItemTemplate>
       <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='Default.aspx?ID=<%#Eval("id")%>' Text="TweetText"></asp:HyperLink>
     </ItemTemplate>
 </asp:TemplateField>

或者

您甚至可以在 GridView OnRowDataBound 事件中找到 HyperLink。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
  if(e.Row.RowType == DataControlRowType.DataRow)
  {
    HyperLink myHyperLink = e.Row.FindControl("HyperLink1") as HyperLink;
    if(myHyperLink !=null)
    {
       //myHyperLink.NavigateUrl="URL"; 
    }
  }

}

于 2012-05-18T05:40:46.073 回答
0

用这个

    <asp:HyperLinkField DataNavigateUrlFields="id" Text="Details" ControlStyle-Font-old="true" 
DataNavigateUrlFormatString="~/pages/UserDetails.aspx?id={0}" />

动态设置DataNavigateUrlFormatString或您可以Hyperlink使用itemtemplet

于 2012-05-18T05:13:07.160 回答