【问题标题】:How can I include two dynamic items in the NavigateURL properly?如何在 NavigateURL 中正确包含两个动态项?
【发布时间】:2009-05-21 17:39:12
【问题描述】:

我有一个使用绑定、超链接和模板字段的网格视图。

我试图弄清楚如何在 Lo-Fi:HyperLink 控件和 Hi-Fi:HyperLink 控件的 NavigateURL 中正确包含两个动态项我知道如何使用 HyperLinkField 字段来执行此操作,就像我在后两个中所做的那样列,但我不能在模板列中使用它。

我需要将我用于 text 属性的 <%# Eval("Locker_LO_Filename")%> 项目连接到 {1} 当前所在的 URL 的末尾。

<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>

【问题讨论】:

    标签: asp.net 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。我希望这会有所帮助,如果没有,至少可以指出正确的方向。

    【讨论】:

    • Craig - 除了必须为 VB.net 重写并在函数调用中添加正确的字段名称外,您的建议非常有效。在所有压力中,我忘记了您可以从模板项中调用函数。非常感谢您的帮助。
    【解决方案2】:

    看看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;
        }
    }
    

    【讨论】:

    • 这也可以。但我认为目标是分配一个复合字符串,而不仅仅是一个数据项。 :)
    • rwwilden - 感谢您的意见,但 Craigs 的建议更符合我的需要。谢谢你的时间。
    • 两者都可以。从来没有真正考虑过使用这样的页面方法。
    猜你喜欢
    • 1970-01-01
    • 2016-02-18
    • 2018-08-25
    • 2019-11-02
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    相关资源
    最近更新 更多