在用户控件(ASCX)中动态设置Gridview DataNavigateUrlFormatString

Ron*_*nIL 3 asp.net user-controls gridview webforms ascx

我有一个问题,我不知道是否可以做到.

我有一个aspx页面,加载用户控件(ascx)的用户活动的dedpends.

用户控件有一个gridview,其中一列是超链接.

<asp:HyperLinkField  DataNavigateUrlFormatString='<%page %>'
        DataTextField="ReqId" HeaderText="Request No." DataNavigateUrlFields="ReqId" />
Run Code Online (Sandbox Code Playgroud)

我想要点击那个超链接,它将指向带参数的同一页面,但我不能正确.由于某种原因所以我尝试了这个:

<%string page = Page.Request.Path + "reqid={0}"; %>
Run Code Online (Sandbox Code Playgroud)

但在页面中,链接将%page%称为字符串.有人可以指导我如何做到这一点.

ps它曾经像这样工作,ascx在解决方案的根文件夹中,当我将所有控件移动到根目录中名为"Controls"的文件夹时,问题就开始了

<asp:HyperLinkField  DataNavigateUrlFormatString="?reqid={0}"
        DataTextField="ReqId" HeaderText="???? ????" DataNavigateUrlFields="ReqId" />
Run Code Online (Sandbox Code Playgroud)

提前致谢.

ask*_*ids 8

使用模板字段并添加超链接.

<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>
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我假设ReqId出现在第一个细胞中.