【问题标题】:Set Gridview DataNavigateUrlFormatString Dynamically inside User Control(ASCX)在用户控件(ASCX)中动态设置 Gridview DataNavigateUrlFormatString
【发布时间】:2011-09-22 02:04:58
【问题描述】:

我有个问题不知道能不能解决。

我有一个 aspx 页面, 加载取决于用户控件(ascx)的用户活动。

用户控件有一个gridview,我的列之一是超链接。

<asp:HyperLinkField  DataNavigateUrlFormatString='<%page %>'
        DataTextField="ReqId" HeaderText="Request No." DataNavigateUrlFields="ReqId" />

我希望在点击该超链接时,它将指向带有参数的同一页面, 但我做不到。出于某种原因,所以我尝试了这个:

<%string page = Page.Request.Path + "reqid={0}"; %>

但在页面中,链接将 %page% 作为字符串引用。 有人可以指导我怎么做。

附言 它曾经像那样工作并且ascx位于解决方案的根文件夹中,当我将所有控件移动到名为“Controls”的根文件夹中时,问题就开始了

<asp:HyperLinkField  DataNavigateUrlFormatString="?reqid={0}"
        DataTextField="ReqId" HeaderText="מספר בקשה" DataNavigateUrlFields="ReqId" />

提前致谢。

【问题讨论】:

  • 我忘了提到有几个页面(aspx)加载了那个控件,而且每次 url 都是不同的。所以我需要每个调用页面都这样做。

标签: asp.net gridview user-controls webforms ascx


【解决方案1】:

使用模板字段并为其添加超链接。

<asp:TemplateField HeaderText="Request No.">
   <ItemTemplate>
     <asp:HyperLink ID="EditHyperLink1" runat="server" 
          NavigateUrl='<%# Page.Request.Path + "?reqid=" + Eval("ReqId") %>'
          Text='<%# Eval("ReqId") %>' >
     </asp:HyperLink>
   </ItemTemplate>
</asp:TemplateField>

或者您可以使用 GridView_RowDatabound 事件处理程序并更改特定控件的 Navigateurl。

protected void myGV_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        HyperLink myHL = (HyperLink)e.Row.FindControl("EditHyperLink1");
        myHL.NavigateUrl = Page.Request.Path + "?reqid=" + e.Row.Cells[0].Text.ToString();
    }
}

我假设 ReqId 存在于第一个单元格中。

【讨论】:

  • 你能给我一个 GridView_RowDatabound 的例子吗?
  • 感谢询问者!!最后一个问题,您认为哪个更好?
  • 我认为第一种方法更简单。但如果您需要高级解析或其他一些操作,则使用 rowdatabound。例如,我正在生成一个带有“+”符号的字段值的链接。 '+' 符号必须转换为 %2B 才能使链接真正起作用。在这种情况下,我不得不使用 rowdatabound 来进行字符串操作。因此,只要有机会,我仍然会选择第一种,因为它很简单。
猜你喜欢
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 2011-01-04
相关资源
最近更新 更多