Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在GridView上的asp.net中显示文件图标_C#_Asp.net_Gridview_Icons_Nested Gridview - Fatal编程技术网

C# 在GridView上的asp.net中显示文件图标

C# 在GridView上的asp.net中显示文件图标,c#,asp.net,gridview,icons,nested-gridview,C#,Asp.net,Gridview,Icons,Nested Gridview,我无法根据asp.net GridView中的文件扩展名显示文件图标 GridView的结构是 教程是 错误是: 对象引用未设置为对象的实例 在这行代码后面: 下面是我的代码 你能帮我吗 提前感谢您的帮助,非常感谢 <asp:TemplateField> <ItemTemplate> <img alt="" style="cursor: pointer" src="images/plus.png" /> <asp:

我无法根据asp.net GridView中的文件扩展名显示文件图标

GridView的结构是

教程是

错误是:

对象引用未设置为对象的实例

在这行代码后面:

下面是我的代码

你能帮我吗

提前感谢您的帮助,非常感谢

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

RowDataBound上受保护的void(对象发送方,GridViewRowEventArgs e)
{
如果(e.Row.RowType==DataControlRowType.DataRow)
{
字符串根=@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目录=新的DirectoryInfo(根+“/”+文件夹);
FileInfo[]FileInfo=directory.GetFiles(“*.*”,
SearchOption.AllDirectories);
fCount=directory.GetFiles(“*.*”,
SearchOption.AllDirectories)长度;
gvLabel.Text=fCount.ToString();
长尺寸=0;
foreach(目录.GetFiles(根+“/”+文件夹中的字符串文件,
“**”,SearchOption.AllDirectories)
{
size+=新文件信息(file).Length;
}
gvFolder.Text=Math.Round((双精度)大小/(双精度)(1024*1024),
2) .ToString()+“MB”;
链接按钮lnkDownload=
(LinkButton)e.Row.FindControl(“lnkDownload”);
HiddenField hf=(HiddenField)e.Row.FindControl(“HiddenField 1”);
如果(!String.IsNullOrEmpty(lnkDownload.Text))
{
HtmlImage=(HtmlImage)e.Row.FindControl(“文件图像”);
Add(“src”,geticonformfile(hf.Value));
}
gvOrders.DataSource=fileInfo;
gvOrders.DataBind();
}
}
私有字符串geticonformfile(字符串fileText)
{
字符串扩展名=Path.GetExtension(fileText);
extension=extension.Trim('.').ToLower();
返回“~/fileicons/”+扩展名+”.png”;
}

您有一个嵌套的GridView结构,
gvOrders
是您的内部GridView。因此,您必须从内部GridView的行中获取LinkButton,如下所示:

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

你已经读过了吗
(LinkButton)e.Row.FindControl(“lnkDownload”)
如果该控件不存在,可能会返回null,然后在访问它的
Text
属性时抛出NRE。您使用的是哪种结构?嵌套还是简单?@Asif.Ali嵌套在您的上述代码中,您的
gvOrders
位于嵌套的GridView模板内。@Asif.Ali很抱歉,结构是嵌套的
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
            }
        }
    }
}