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

时间:2011-06-24 14:22:01

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

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

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

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

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

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

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

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

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

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

提前感谢。

1 个答案:

答案 0 :(得分: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>

或者您可以使用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。