返回首页


前几天,我发表了一篇文章??通过使用GridView的HyperLinkField多个值吗??我解释了,你可以通过与GridView HyperLinkField多个参数,使用DataNavigationUrlField和DataNavigateUrlFormatString属性。在这篇文章中,我将解释如何可以传递一些外部值具有相同的超链接字段作为参数。
DataNavigationUrlField使用作为参数,这些领域是GridView的一部分的DataSource。现在的问题是当你想通过其他一些变量作为参数,这是没有的DataSource的一部分。在下面的图片所示,我们通过EmpID的,作为论据的parentId,这两个领域是GridView中的数据成员的数据源。{S0}
现在说,你要通过特定记录的parentId和EmpID的childID的,你想,超链接的URL应该像代码>的Default.aspx EmpID的=1安培;??的parentId = P1amp; childID的= C1 "childID的是没有的数据源的一部分。
可以实现特定的GridView写在代码后面的代码。有两个事件,在那里你可以覆盖该超链接字段的导航URL。您可以使用相同的Gridview_RowDataBound或Gridview_PreRender。
让我们开始Gridview_RowDataBound。 GridView的RowDataBound事件引发时,数据行绑定到数据。因此,每行的RowDataBound事件引发与实际数据从数据源绑定。在RowDataBound事件中,你可以为特定的细胞对照检查,并可以追加的NavigateURL。下面是相同的代码片段:

/// <summary>

/// Handles the RowDataBound event of the grdStudent control.

/// </summary>

/// <param name="sender">The source of the event.</param>

/// <param name="e">The <see cref="System.Web.UI.WebControls.GridViewRowEventArgs"/> 

/// instance containing the event data.</param>

protected void grdStudent_RowDataBound(object sender, GridViewRowEventArgs e)

{

    if (e.Row.RowType == DataControlRowType.DataRow)

    {

        HyperLink hyperlink = (HyperLink)e.Row.Cells[0].Controls[0];

        hyperlink.NavigateUrl += "&ChildID=" + this.ExternalValue;

    }

} 

,您可以以类似的方式做同样的事情在Gridview_PreRender事件。由于每个ASP.NET页面的生命周期,控制Pre_Render提出之前,保存视图状态和呈现事件。因此,这是在这里你可以自定义您的控制ViewState数据保存和呈现前的最后一个事件。下面是相同的代码片段:{C}
如果你想知道它是如何实际工作,只是在数据绑定设置一个断点,你会发现,超链接字段的NavigateUrl已经与您传递的值作为DataNavigationUrlField设置。和内部的RowDataBound或Pre_Render,我们追加的外部参数相同的NavigateURL。

{A1}
下面是相同HyperLinkField的HTML片段。
{A2}
您可以使用Hyperlinkfield的NavigateUrl属性设置URL,但的NavigateURL将所有行设置相同的URL。所以如果你想为每行不同的URL,你必须使用DataNavigationUrlField或你需要重写的NavigateURL期间的RowDataBound或Pre_Render。如果你设置属性(的NavigateURL和DataNavigationUrlField){A3}。
我希望这篇文章将帮助您。
{A4}
:{A5} {S10}| Abhijit ANA

回答

评论会员: 时间:2