2017-10-20 21 views
0

Je ne peux pas afficher les icônes de fichier en fonction des extensions de fichiers dans asp.net GridView.C# Affiche les icônes de fichier dans asp.net sur GridView imbriqué

La structure de GridView est nested

Je n'ai pas d'erreur, mais la colonne de GridView pour afficher des icônes est vide.

enter image description here

Mon code ci-dessous.

Pouvez-vous m'aider?

Merci d'avance pour toute aide, vraiment appréciée.

.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

Si essayez avec:

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

En sortie I ont: enter image description here

+0

Si vous affichez juste l'image de la grille, apparaît-il? Je soupçonne que l'URL ne se résout pas. – Marisa

+0

@Marisa Merci pour la réponse, s'il vous plaît voir ** # Edit01 ** dans ma première question- –

+0

êtes-vous sûr que le OnRowDataBound sera renvoyé? –

Répondre

1

S'il vous plaît, essayez ceci:

<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

En prenant une hypothèse que exten == ".pdf" n'est pas vrai.

Peut-être

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

serait mieux. Cela élimine toute cette activité de sous-chaîne.

+0

Merci pour la réponse, mais la colonne de gridview pour les icônes de spectacle continue vide –

0

Cet extrait vous aidera. Et sans la boucle imbriquée de la GridView. Notez que le nom de fichier est en minuscules pour représenter .PDF ou .pdf dans les noms de fichiers.

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