从Directory.GetFiles填充二维列表

时间:2014-11-16 14:35:08

标签: multidimensional-array 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"));
            }

问题是下拉列表将显示文件的完整路径。我只是想显示文件名和扩展名。我想我可以使用二维List,并将路径加载到一个维度。然后,我可以循环遍历该维度并解析最后一个" \"获取文件名并将其写回该列表中的其他维度。这将导致List具有两个维度,一个包含路径,另一个包含文件名。然后,我可以使用DataValueField的路径和DataTextField的文件名从2维List中加载下拉列表。

我的问题是我无法从Directory.GetFiles加载2维列表。有人可以发一个例子吗? 另外,如何专门处理列表中的每个维度以加载下拉列表的值/文本属性?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我认为你不需要多维数组。你可以分开"价值"和"文字"。也就是说,数据绑定支持值和文本,使用" DataValueField"和#34; 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"));
}