2011-06-24 8 views
3

私はそれを行うことができますかわからない問題があります。グリッドビューを設定するDataNavigateUrlFormatString動的にユーザーコントロール(ASCX)内

私はaspxページに というユーザーアクティビティにユーザーコントロール(ascx)を割り当てます。

ユーザーコントロールには、自分の列の1つがハイパーリンクであるグリッドビューがあります。

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

私は、そのハイパーリンクのクリック時に、それはパラメータ、 と同じページに指示しますが、私は右のそれを行う傾けることを望みます。何らかの理由で私はこの1つを試しました:

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

しかし、このページでは%page%を文字列として参照しています。 誰かが私に方法を指示することができます。それはそのようなものだったとascxファイルは、ソリューションのルートフォルダにあった私は、「コントロール」

<asp:HyperLinkField DataNavigateUrlFormatString="?reqid={0}" 
     DataTextField="ReqId" HeaderText="מספר בקשה" DataNavigateUrlFields="ReqId" /> 
をという名前のルートにフォルダにすべての私のコントロールを移動したときに、問題が起動したとき

PS は、それが動作するために使用しましたありがとうございます。

+0

私は、いくつかのページ(aspx)がそのコントロールをロードしていることを忘れていました。だから私は呼び出しページごとにそれを行う必要があります。 – 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