2011-06-24 29 views
3

我有一个问题,我不知道它是否可以完成。在用户控件(ASCX)内动态设置Gridview DataNavigateUrlFormatString

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

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

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

我想,对超链接的点击,它会直接与参数相同的页面, 但我不能这样做的权利。由于某种原因,所以我试过这一个:

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

但在页面中链接指%page%作为一个字符串。 有人可以指导我如何去做。

PS 它用来工作时,它是这样的,在ASCX是在解决方案的根文件夹,这个问题开始,当我提出我的所有控件中命名的根文件夹“控制”

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

在此先感谢。

+0

我忘了提及几个页面(aspx)加载该控件,并且每次url不同。所以我需要每个calliing页面都做。 – RonenIL

回答

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出现在第1个单元格中。

+0

你能给我一个GridView_RowDatabound的例子吗? – RonenIL

+0

查看上面的示例。 – askids

+0

谢谢askids !!只是最后一个问题你认为什么更好? – RonenIL

相关问题