2014-11-16 3 views
0

настоящего времени я заселение выпадающего списка с содержимым всех файлов в каталоге, используя этот код:занесение в 2 одномерный список из Directory.GetFiles

string[] filePaths = Directory.GetFiles(@ConfigurationManager.AppSettings["File_Path"] 
.ToString(), "*.txt"); 

      if (filePaths == null || filePaths.Length == 0) 
      { 
       ddlFiles.Items.Insert(0, new ListItem("NO TEXT FILES CURRENTLY AVAILABLE !")); 
      } 
      else 
      { 
       ddlFiles.DataSource = filePaths; 
       ddlFiles.DataBind(); 
       ddlFiles.Items.Insert(0, new ListItem("PLEASE SELECT A TEXT FILE")); 
      } 

Проблема заключается в том, что выпадающий покажет полный путь к файлам. Я просто хочу показать имя файла и расширение. Я полагаю, что могу использовать двумерный список и загружать путь в одно измерение. Затем я мог просто пропустить это измерение и проанализировать все после последнего «\», чтобы получить только имя файла и записать его обратно в другое измерение в этом списке. Это приведет к списку с двумя измерениями, один с путями и один с именами файлов. Затем я мог загрузить выпадающий список из 2-мерного списка, используя путь для DataValueField и имя файла для DataTextField.

Моя проблема в том, что я не могу получить 2-мерный список для загрузки из Directory.GetFiles. Может ли кто-нибудь отправить пример? Кроме того, как конкретно я описываю каждое измерение в списке для загрузки атрибутов Value/Text в раскрывающемся списке?

Заранее благодарю вас за помощь!

ответ

0

Я не думаю, что вам нужны многомерные массивы здесь. Вы можете просто отделить «Значение» и «Текст». То есть привязка данных поддерживает значение и текст, используя «DataValueField» и «DataTextField», вы можете просто использовать их. Значит, сначала вы получите список пар, а затем привязать их к значению/текст этого пункта, как это:

var filePaths = Directory.GetFiles(@ConfigurationManager.AppSettings["File_Path"].ToString(), "*.txt") 
    .Select(path => new 
    { 
     Path = path, 
     Name = Path.GetFileName(path) 
    }).ToArray(); 

if (filePaths == null || filePaths.Length == 0) 
{ 
    ddlFiles.Items.Insert(0, new ListItem("NO TEXT FILES CURRENTLY AVAILABLE !")); 
} 
else 
{ 
    ddlFiles.DataSource = filePaths; 
    ddlFiles.DataValueField = "Path"; 
    ddlFiles.DataTextField = "Name"; 
    ddlFiles.DataBind(); 
    ddlFiles.Items.Insert(0, new ListItem("PLEASE SELECT A TEXT FILE")); 
} 
+0

Эта часть именно то, что я искал: .select (путь => новый { Путь = путь, Name = Path.GetFileName (путь) }). ToArray(); Спасибо ! – pmcs