2009-05-21 19 views
0

私は、バインドされたハイパーリンクとテンプレートフィールドを使ってグリッドビューを持っています。NavigateURLに2つの動的項目を適切に含めるにはどうすればよいですか?

Lo-Fi:HyperLinkコントロールとHi-Fi:HyperLinkコントロールの2つのダイナミックアイテムをNavigateURLに正しく組み込む方法を理解しようとしています。私は2番目の2つの列のようにHyperLinkFieldフィールドでこれを行う方法はわかっていますが、それをテンプレート列の中で使うことはできません。

{1}が現在存在するURLの最後にtextプロパティ用に使用している<%# Eval("Locker_LO_Filename")%>アイテムを連結する必要があります。

<asp:GridView ID="gvLocker" runat="server" HeaderStyle-BackColor="Goldenrod" 
     HeaderStyle-ForeColor="DarkBlue" AlternatingRowStyle-BackColor="Cornsilk" 
      Font-Names="Verdana,arial,helvetica" AutoGenerateColumns="False" Font- Size="13px" Width="640px" BorderColor="#404040"> 
      <Columns> 
       <asp:BoundField DataField="memid" HeaderText="MemID" ReadOnly="True" SortExpression="memid" 
        Visible="False" HeaderStyle-Font-Size="13px" />       
       <asp:HyperLinkField DataNavigateUrlFormatString="myLockerEditSong.aspx?ID={0}&amp;li={1}" 
        DataTextField="EditIt" DataNavigateUrlFields="memid,lockid" HeaderStyle-Font-Size="13px"> 
        <ItemStyle Width="65px" Font-Size="13px" /> 
        </asp:HyperLinkField> 
       <asp:HyperLinkField DataNavigateUrlFormatString="myLockerDeleteSong.aspx?ID={0}&amp;li={1}" 
        DataTextField="Delete" DataNavigateUrlFields="memid,lockid" HeaderStyle-Font-Size="13px"> 
        <ItemStyle Width="65px" Font-Size="13px" /> 
       </asp:HyperLinkField> 
       <asp:TemplateField HeaderText="Song Information" HeaderStyle-Font-Size="13px"> 
       <ItemTemplate> 
         <strong><asp:Label ID="Label1" runat="server" Text='<%# Eval("Locker_Title") %>'></asp:Label></strong><br /> 
         Lo-Fi:<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("memid", "/uploads/{0}/Locker/LoFi/{1}") %>' 
          Text='<%# Eval("Locker_LO_Filename") %>' Font-Size="13px"></asp:HyperLink><br /> 
         Hi-Fi:<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%# Eval("memid", "/uploads/{0}/Locker/HiFi/{1}") %>' 
          Text='<%# Eval("Locker_HI_Filename") %>' Font-Size="13px"></asp:HyperLink>         
        </ItemTemplate> 
        <ItemStyle Width="350px" Font-Size="13px" /> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="File Information" SortExpression="Locker_UploadDate" HeaderStyle-Font-Size="13px"> 
        <ItemTemplate> 
         <strong>Uploaded:</strong> <asp:Label ID="Label2" runat="server" Text='<%# Eval("Locker_UploadDate") %>'></asp:Label><br /> 
         <strong>Modified:</strong> <asp:Label ID="Label3" runat="server" Text='<%# Eval("Locker_DateLastModified") %>'></asp:Label> 
         <ItemStyle Font-Size="13px" /> 
        </ItemTemplate>       
       </asp:TemplateField>      
      </Columns>   
     <HeaderStyle BackColor="#FFDF59" ForeColor="Maroon" HorizontalAlign="Left" /> 
     <AlternatingRowStyle BackColor="PaleGoldenrod" /> 
    </asp:GridView> 

答えて

1

の代わりに%> <%#エバール(..)を使用して、以下を使用します。..

<%# FormatHiFi(DataBinder.Eval(Container.DataItem, "Locker_Title"), DataBinder.Eval(Container.DataItem, "OtherStringName"))%> 

これは、コード内のいくつかのコードを呼び出します。 - 必要に応じて文字列をフォーマットする後方のページ(下記参照)。

protected string FormatHiFi(object str1, object str2) 
{ 
    return string.Format("/uploads/{0}/Locker/HiFi/{1}", str1.ToString(), str2.ToString()) 
} 

Lo-Fiでも同じことが言えます。私はこれが助けてくれることを願っています。

+0

Craig-VB.netのために書き直す必要があることを除いて、関数呼び出しで正しいフィールド名を追加すると、あなたの提案は完全に機能しました。すべてのストレスの中で、私はあなたがテンプレート項目から関数を呼び出すことができないことを忘れていました。助けてくれてありがとう。 –

1

GridViewRowDataBoundイベントをご覧ください。あなたは(未テスト)このようなものが必要:

void gvLocker_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // I'm not sure what kind of data object you use as your datasource, 
     // but dataItem should have some type. 
     MyObject dataItem = e.Row.DataItem; 

     // Find the right control inside the row and set its Text property. 
     HyperLink link = (HyperLink) e.Row.FindControl("HyperLink1"); 
     link.Text = dataItem.Locker_LO_Filename; 
    } 
} 
+0

これも同様に機能します。しかし、データ項目だけではなく、複合文字列を割り当てることが目標だと思います。 :) – Craig

+0

rwwilden - あなたの入力に感謝しますが、Craigsの提案は私が必要としたものにもっとインラインでした。ありがとうございます。 –

+0

どちらも動作します。このようなページメソッドを使うことは決して考えられません。 –

関連する問題