2021年8月13日 星期五

[研究][ASP.NET]GridView中HyperLinkField用法範例

[研究][ASP.NET]GridView中HyperLinkField用法範例

2021-08-10

Visual Studio 2019 + ASP.NET + C# + WebForm + Web Application

筆記一下。


<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
    Caption="檔案、圖片列表" EmptyDataText="無檔案"
    AutoGenerateColumns="False" DataKeyNames="seq" DataSourceID="SqlDataSource1">
    <Columns>
        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
        <asp:BoundField DataField="FileName" HeaderText="FileName" SortExpression="FileName" />
        <asp:HyperLinkField DataTextField="FileName" HeaderText="FileName2" 
		DataNavigateUrlFields="SubDir, FileName" Target="_blank" 
		DataNavigateUrlFormatString="../UploadFile/{0}/{1}" Text="{1}" />
    </Columns>
</asp:GridView>

把 HyperLinkField 做「將這個欄位轉換為 TemplateField」,感覺有點奇怪,DataNavigateUrlFields 有2個參數,轉換 NavigateUrl 後剩下一個 SubDir,測試一下。


<asp:TemplateField HeaderText="FileName3">
    <ItemTemplate>
        <asp:HyperLink ID="HyperLink1" runat="server" 
		    NavigateUrl='<%# Eval("SubDir", "/{0}/{1}") %>' 
			Target="_blank" Text='<%# Eval("FileName") %>'>
			</asp:HyperLink>
    </ItemTemplate>
</asp:TemplateField>

deploy 後執行會出錯【索引 (以零為起始) 必須大於或等於零,並且小於引數清單的大小。

檢查一下,沒轉換前的寫法,執行正確;轉換後則不行執行。

再改一下

<asp:TemplateField HeaderText="FileName4">
    <ItemTemplate>
        <asp:HyperLink ID="HyperLink2" runat="server" 
		NavigateUrl='<%# String.Format((string)ConfigurationManager.AppSettings["WebSiteURL"] + @"{0}/{1}",Eval("SubDir"), Eval("FileName")) %>' 
		Target="_blank" Text='<%# Eval("FileName") %>'></asp:HyperLink>
    </ItemTemplate>
</asp:TemplateField>


********************************************************************************

微軟官方範例

HyperLinkField 類別 (System.Web.UI.WebControls) | Microsoft Docs
https://docs.microsoft.com/zh-tw/dotnet/api/system.web.ui.webcontrols.hyperlinkfield?view=netframework-4.8


<asp:hyperlinkfield text="Details..." navigateurl="~\details.aspx" 
    headertext="Order Details"   target="_blank" />



<asp:hyperlinkfield datatextfield="UnitPrice"
    datatextformatstring="{0:c}"
    datanavigateurlfields="ProductID"
    datanavigateurlformatstring="~\details.aspx?ProductID={0}"          
    headertext="Price" target="_blank" />

(完)

相關 

HyperLinkField.DataNavigateUrlFields 屬性 (System.Web.UI.WebControls) | Microsoft Docs
https://docs.microsoft.com/zh-tw/dotnet/api/system.web.ui.webcontrols.hyperlinkfield.datanavigateurlfields?view=netframework-4.8

HyperLinkField.DataNavigateUrlFormatString 屬性 (System.Web.UI.WebControls) | Microsoft Docs
https://docs.microsoft.com/zh-tw/dotnet/api/system.web.ui.webcontrols.hyperlinkfield.datanavigateurlformatstring?view=netframework-4.8


沒有留言:

張貼留言