2017-10-20 73 views
0

根据asp.net GridView中的文件扩展名,我无法显示文件图标。C#在嵌套的GridView上显示asp.net中的文件图标

的GridView的结构nested

我没有错误,但GridView控件用于显示图标栏是空的。

enter image description here

我下面的代码。

你能帮我吗?

预先感谢您的任何帮助,真的很感激。

的.cs

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

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

     foreach (GridViewRow gvr in gvOrders.Rows) 
     { 

      LinkButton lnkDownload = (LinkButton)gvr.FindControl("LinkButton"); 
      Image ib = (Image)gvr.FindControl("ib1"); 
      string path = lnkDownload.Text; 
      string exten = path.Substring(path.LastIndexOf(".")); 
      if (exten == ".pdf") 
       ib.ImageUrl = "images/pdf.GIF"; 

     }    

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

的.aspx

<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> 
          <asp:Image runat="server" ID="ib1" /> 
         </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('Sure ?')) return false;"> 
          </asp:LinkButton> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 
     </asp:Panel> 
    </ItemTemplate> 
</asp:TemplateField> 

#Edit01

如果尝试使用:

<asp:Image runat="server" ID="ib1" ImageUrl="images/pdf.gif" /> 

在输出我: enter image description here

+0

如果你只是显示网格外的图片,它出现在哪里?我怀疑这个网址没有解决。 – Marisa

+0

@Marisa感谢您的回复,请参阅我的第一个问题中的**#Edit01 ** - –

+0

您是否确定OnRowDataBound将被解雇? –

回答

1

请试试这个:

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:Image runat="server" ID="ImgIco" 
      ImageUrl='<%# string.Format("/images/{0}.png", 
      Eval("Name").ToString().Split(Convert.ToChar(".")) 
      [Eval("Name").ToString().Split(Convert.ToChar(".")).Count() - 1].ToString()) %>' /> 
    </ItemTemplate> 
</asp:TemplateField> 
0

以猜测,exten == ".pdf"是不正确的。

也许

if(lnkDownload.Text.EndsWith("pdf") == true) { ib.ImageUrl = "images/pdf.GIF"; }

会更好。这消除了所有的子串业务。

+0

感谢您的回复,但显示图标的gridview列继续为空 –

0

这段代码会有帮助。没有嵌套循环的GridView。请注意,文件名是小写的,以便在文件名中包含.PDF.pdf

protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //check if the row is a datarow 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     //cast the row back to a datarowview 
     DataRowView row = e.Row.DataItem as DataRowView; 

     //get the extension from the file name 
     string extension = Path.GetExtension(row["Name"].ToString().ToLower()); 

     //show the correct icon 
     if (extension == ".pdf") 
     { 
      ib.ImageUrl = "/images/pdf.GIF"; 
     } 
     else 
     { 
      ib.ImageUrl = "/images/unknown.GIF"; 
     } 
    } 
} 
相关问题