我从网络服务中获取了一系列文件夹和文件。我想在TreeView中列出它们,但我不确定如何正确添加文件。我试图将集合转换为IEnumerable并将其绑定到我的TreeView。
我的代码将所有文件放在根文件夹中。我想我的方法远非最佳。可以用Concat做到这一点吗?
此外,我的代码有限,因为它只搜索几个级别。我怎么能转换整个集合?
private void documentButton_Click(object sender, RoutedEventArgs e)
{
var FileInfoData = new FileDialog("Q", "Title");
FileInfoData.ShowDialog();
try {
Folder folder = Webservices.GetFolders(FileInfoData.customerIdResponse, 0);
IEnumerable<object> folders = folder.Folders;
if (folder.Files != null && folder.Files.Count() > 0)
{
folders = folders.Concat(folder.Files);
foreach (Webservice.FileInfo.File f in folder.Files)
{
f.Name = f.Name + "." + f.Extension;
}
}
if(folder.Folders != null)
{
foreach (Folder f in folder.Folders)
{
if (f.Files != null && f.Files.Count() > 0)
{
foreach (Webservice.FileInfo.File fi in f.Files)
{
fi.Name = fi.Name + "." + fi.Extension;
}
folders = folders.Concat(f.Files);
}
if (f.Folders != null)
{
foreach (Folder ff in f.Folders)
{
if (ff.Files != null && ff.Files.Count() > 0)
{
foreach (Webservice.FileInfo.File fii in ff.Files)
{
fii.Name = fii.Name + "." + fii.Extension;
}
folders = folders.Concat(ff.Files);
};
}
}
}
}
dataGrid.ItemsSource = folders;
Sample(myTreeView);
myTreeView.ItemsSource = folders;
}
catch (Exception ex){
addInfo(ex.ToString(), true, false);
}
}
这些是生成集合的方法。此代码还限制搜索的级别。 webservice每个请求只返回一个级别。
public static Folder GetFolder(int customerId, int folderId)
{
var cookieContainer = _cookie;
using (var fileInfoService = new FileInfoService { CookieContainer = cookieContainer })
{
var search = new FileInfoSearch
{TypeOfResult = ResultType.All};
if (folderId > 0) search.FolderId = folderId;
if (customerId > 0) search.CustomerId = customerId;
var fileInfo = fileInfoService.GetFolderContentInfo(search);
return fileInfo;
}
}
internal static Folder GetFolders(int customerId, int folderId)
{
var cookieContainer = _cookie;
using (var fileInfoService = new FileInfoService { CookieContainer = cookieContainer })
{
var search = new FileInfoSearch
{ TypeOfResult = ResultType.All };
if(customerId > 0)
{
Folder[] _folders = GetFolder(customerId, folderId).Folders;
if(_folders != null)
{
folderId = _folders.First().ParentId;
customerId = 0;
}
}
Folder folders = GetFolder(customerId, folderId);
if(folders.Folders != null)
{
foreach (Folder f in folders.Folders)
{
Folder _f = GetFolder(0, f.Id);
f.Folders = _f.Folders;
f.Files = _f.Files;
if (f.Folders != null)
{
foreach (Folder ff in f.Folders)
{
Folder _ff = GetFolder(0, ff.Id);
ff.Folders = _ff.Folders;
ff.Files = _ff.Files;
}
}
}
}
return folders;
}
}