2009-05-21 2 views
0

У меня есть сетка с использованием связанных гиперссылок и полей шаблонов.Как я могу включить два динамических элемента в NavigateURL правильно?

Я пытаюсь понять, как включить два динамических элементов в NavigateURL правильно как от Lo-Fi:HyperLink управления и контроля Hi-Fi:HyperLink я знаю, как сделать это с полем HyperLinkField как я во второй две колонки, но я не может использовать это внутри столбца шаблона.

Мне нужно связать элемент <%# Eval("Locker_LO_Filename")%>, который я использую для свойства text в конце URL-адреса, где {1} в настоящее время.

<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

Вместо использования <% # Eval (..)%>, используйте следующий ..

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

Это будет вызывать некоторый код в код -behind (см. ниже), которая будет форматировать строку по мере необходимости.

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 и добавлять правильные имена полей в вызове функции, ваше предложение отлично работало. Во всем стрессе я забыл, что вы можете вызывать функции из шаблона. Большое спасибо за помощь. – 2009-05-21 18:49:52

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 было более строгим с тем, что мне было нужно. Спасибо за ваше время. – 2009-05-21 18:50:54

+0

Оба будут работать. Никогда не рассматривал использование подобных страниц. –

Смежные вопросы