2017-10-20 104 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"; 
     } 
    } 
} 
相關問題