2017-10-11 1 views
1

J'ai besoin de montrer les noms de fichiers d'un dossier dans un contrôle GridView.Obtenir des noms de fichiers à partir du dossier dans le contrôle Gridview dans ASP.Net C#

Je pensais utiliser la Classe de répertoire.

Dans ma base de données que j'ai la colonne sFolder avec cette valeur pour chaque ligne:

control/Imp/foo 

J'ai essayé ce tutorial sur le web, mais je ne peux pas obtenir les noms de fichiers d'un dossier dans un Contrôle GridView.

Je n'ai pas d'erreur mais GridView est vide même si le chemin d'accès au dossier est correct.

Mon code ci-dessous.

Pouvez-vous m'aider?

Nous vous remercions d'avance pour toute aide, vraiment apprécié

.cs

dt2 = new DataTable(); 
ds2 = new DataSet(); 

sql = @String.Format(" SELECT * FROM tbl_2 WHERE sFolder IN ('control/Imp/foo'); "); 

using (OdbcConnection cn = 
    new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString)) 
{ 
    using (OdbcCommand cmd = 
     new OdbcCommand(sql, cn)) 
    { 

     OdbcDataAdapter adapter = 
      new OdbcDataAdapter(cmd); 
     adapter.Fill(ds2); 

     if (ds2.Tables.Count > 0) 
     { 
      dt2 = ds2.Tables[0]; 
      FilePath = Server.MapPath("/myFolder/" + ds2.Tables[0].Rows[0]["sFolder"].ToString().Replace('/', '\\')); 
      Response.Write(FilePath); 

// the response write FilePath is C:\inetpub\wwwroot\aspnet\myFolder\control\Imp\foo // 

      string[] filesLoc = Directory.GetFiles(FilePath); 
      List<ListItem> files = new List<ListItem>(); 
      foreach (string file in filesLoc) 
      { 
       files.Add(new ListItem(Path.GetFileName(file))); 
      } 
      gvDownload.DataSource = files; 
      gvDownload.DataBind(); 

     } 
    } 
} 

return ds2; 

.aspx

<asp:GridView ID="gvDownload" EmptyDataText="Data empty" 
    runat="server" AutoGenerateColumns="False" 
    BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" GridLines="Vertical"> 
    <AlternatingRowStyle BackColor="#DCDCDC" /> 
    <Columns> 
     <asp:BoundField DataField="Text" HeaderText="FileName" /> 
    </Columns> 
</asp:GridView> 

#edit 01

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      BindData(); 
     } 
    } 


    private void BindData() 
    { 
     RetrieveProductsDowload(); 
    } 

    private DataSet RetrieveProductsDowload() 
    { 
dt2 = new DataTable(); 
ds2 = new DataSet(); 

sql = @String.Format(" SELECT * FROM tbl_2 WHERE sFolder IN ('control/Imp/foo'); "); 

using (OdbcConnection cn = 
    new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString)) 
{ 
    using (OdbcCommand cmd = 
     new OdbcCommand(sql, cn)) 
    { 

     OdbcDataAdapter adapter = 
      new OdbcDataAdapter(cmd); 
     adapter.Fill(ds2); 

     if (ds2.Tables.Count > 0) 
     { 
      dt2 = ds2.Tables[0]; 
      FilePath = Server.MapPath("/myFolder/" + ds2.Tables[0].Rows[0]["sFolder"].ToString().Replace('/', '\\')); 
      Response.Write(FilePath); 

// the response write FilePath is C:\inetpub\wwwroot\aspnet\myFolder\control\Imp\foo // 

      string[] filesLoc = Directory.GetFiles(FilePath); 
      List<ListItem> files = new List<ListItem>(); 
      foreach (string file in filesLoc) 
      { 
       files.Add(new ListItem(Path.GetFileName(file))); 
      } 
      gvDownload.DataSource = files; 
      gvDownload.DataBind(); 

     } 
    } 
} 

return ds2; 

} 
+0

Essayez: 'gvDownload.DataSource = Directory.GetFiles (FilePath); gvDownload.DataBind(); ', utilisez' AutoGenerateColumns = "True" 'et supprimez' ... 'de GridView. Est-ce que ça marche? – Ritesh

+0

@Ritesh merci de votre réponse, mais ne fonctionne pas, le GV est vide. –

+0

Avez-vous utilisé 'Page_Load' dans un fichier .cs pour écrire ce code? – Ritesh

Répondre

2

S'il vous plaît, essayez ceci:

string[] allfiles = Directory.GetFiles(FilePath, "*", SearchOption.AllDirectories); 
gvDownload.DataSource = allfiles; 
gvDownload.DataBind();