簡體   English   中英

在 GridView 上顯示 asp.net 中的文件圖標

[英]Displays file icons in asp.net on GridView

我無法根據 asp.net GridView 中的文件擴展名顯示文件圖標。

GridView的結構是嵌套的

本教程是在asp.net中顯示文件圖標

錯誤是:

你調用的對象是空的

在這行代碼隱藏中

if (!String.IsNullOrEmpty(lnkDownload.Text))

我的代碼如下。

你能幫助我嗎?

預先感謝您的任何幫助,非常感謝。

<asp:TemplateField>
    <ItemTemplate>
        <img alt="" style="cursor: pointer" src="images/plus.png" />
        <asp:Panel ID="pnlOrders" runat="server" Style="display: none">
            <asp:GridView ID="gvOrders" runat="server" 
             AutoGenerateColumns="false" CssClass="mGrid" Width="700" 
             HorizontalAlign="Center">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <img id="fileImage" runat="server" src="" />
                            <asp:HiddenField ID="HiddenField1" 
                     runat="server" Value='<%# Eval("Name") %>' />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Download" ItemStyle-
                     HorizontalAlign="Justify">
                        <ItemTemplate>
                            <asp:LinkButton ID="lnkDownload" Text='<%# 
                             Eval("Name") %>' CommandArgument=
                             '<%# Eval("FullName") %>' runat="server"
                                OnClick="lnkDownload_Click" 
                                OnClientClick="if (!confirm('Confirm ?'))
                                return false;"></asp:LinkButton>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </asp:Panel>
    </ItemTemplate>
</asp:TemplateField>



protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        string root = @FilePath;
        string folder = GridView2.DataKeys[e.Row.RowIndex].Value.ToString();

        GridView gvOrders = (GridView)e.Row.FindControl("gvOrders");
        Label gvLabel = (Label)e.Row.FindControl("gvLabel");
        Label gvFolder = (Label)e.Row.FindControl("gvFolder");


        DirectoryInfo directory = new DirectoryInfo(root + "/" + folder);
        FileInfo[] fileInfo = directory.GetFiles("*.*", 
        SearchOption.AllDirectories);

        fCount = directory.GetFiles("*.*", 
        SearchOption.AllDirectories).Length;
        gvLabel.Text = fCount.ToString();

        long size = 0;
        foreach (string file in Directory.GetFiles(root + "/" + folder, 
        "*.*", SearchOption.AllDirectories))
        {
            size += new FileInfo(file).Length;
        }

        gvFolder.Text = Math.Round((double)size / (double)(1024 * 1024), 
        2).ToString() + " MB";

        LinkButton lnkDownload = 
        (LinkButton)e.Row.FindControl("lnkDownload");
        HiddenField hf = (HiddenField)e.Row.FindControl("HiddenField1");

        if (!String.IsNullOrEmpty(lnkDownload.Text))
        {
            HtmlImage image = (HtmlImage)e.Row.FindControl("fileImage");
            image.Attributes.Add("src", GetIconForFile(hf.Value));
        }

        gvOrders.DataSource = fileInfo;
        gvOrders.DataBind();
    }
}

private string GetIconForFile(string fileText)
{
    string extension = Path.GetExtension(fileText);
    extension = extension.Trim('.').ToLower();
    return "~/fileicons/" + extension + ".png";
}

您有一個嵌套的 GridView 結構,而gvOrders是您的內部 GridView。 因此,您必須從內部 GridView 的行中獲取 LinkBut​​ton,如下所示:

protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        GridView gvOrders = (GridView)e.Row.FindControl("gvOrders");

        foreach (GridViewRow row in gvOrders.Rows)
        {
            LinkButton lnkDownload = (LinkButton)row.FindControl("lnkDownload");
            HiddenField hf = (HiddenField)row.FindControl("HiddenField1");

            if (!String.IsNullOrEmpty(lnkDownload.Text))
            {
                //... some code
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM