728x90
반응형
728x170
▶ FileSystemHelper.cs
using System.IO;
namespace TestProject
{
/// <summary>
/// 파일 시스템 도우미
/// </summary>
public class FileSystemHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 논리 드라이브 배열 구하기 - GetLogicalDriveArray()
/// <summary>
/// 논리 드라이브 배열 구하기
/// </summary>
/// <returns>논리 드라이브 배열</returns>
public string[] GetLogicalDriveArray()
{
return Directory.GetLogicalDrives();
}
#endregion
#region 디렉토리 경로 배열 구하기 - GetDirectoryPathArray(parentDirectoryPath)
/// <summary>
/// 디렉토리 경로 배열 구하기
/// </summary>
/// <param name="parentDirectoryPath">부모 디렉토리 경로</param>
/// <returns>디렉토리 경로 배열</returns>
public string[] GetDirectoryPathArray(string parentDirectoryPath)
{
return Directory.GetDirectories(parentDirectoryPath);
}
#endregion
#region 파일 경로 배열 구하기 - GetFilePathArray(directoryPath)
/// <summary>
/// 파일 경로 배열 구하기
/// </summary>
/// <param name="directoryPath">디렉토리 경로</param>
/// <returns>파일 경로 배열</returns>
public string[] GetFilePathArray(string directoryPath)
{
return Directory.GetFiles(directoryPath);
}
#endregion
#region 디렉토리명 구하기 - GetDirectoryName(directoryPath)
/// <summary>
/// 디렉토리명 구하기
/// </summary>
/// <param name="directoryPath">디렉토리 경로</param>
/// <returns>디렉토리명</returns>
public string GetDirectoryName(string directoryPath)
{
return new DirectoryInfo(directoryPath).Name;
}
#endregion
#region 파일명 구하기 - GetFileName(filePath)
/// <summary>
/// 파일명 구하기
/// </summary>
/// <param name="filePath">파일 경로</param>
/// <returns>파일명</returns>
public string GetFileName(string filePath)
{
return new FileInfo(filePath).Name;
}
#endregion
#region 파일 크기 구하기 - GetFileSize(filePath)
/// <summary>
/// 파일 크기 구하기
/// </summary>
/// <param name="filePath">파일 경로</param>
/// <returns>파일 크기</returns>
public long GetFileSize(string filePath)
{
return new FileInfo(filePath).Length;
}
#endregion
}
}
728x90
▶ MainWindow.xaml
<Window x:Class="TestProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
Width="800"
Height="600"
Title="TreeListView 클래스 : 동적으로 노드 로드하기"
FontFamily="나눔고딕코딩"
FontSize="16">
<Grid>
<dxg:GridControl Name="gridControl">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Name" />
<dxg:GridColumn FieldName="ItemType" />
<dxg:GridColumn FieldName="Size" />
<dxg:GridColumn FieldName="FullName" />
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TreeListView
Name="treeListView"
NodeExpanding="treeListView_NodeExpanding" />
</dxg:GridControl.View>
</dxg:GridControl>
</Grid>
</Window>
300x250
▶ MainWindow.xaml.cs
using System.Windows;
using DevExpress.Utils;
using DevExpress.Xpf.Grid;
using DevExpress.Xpf.Grid.TreeList;
namespace TestProject
{
/// <summary>
/// 메인 윈도우
/// </summary>
public partial class MainWindow : Window
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 파일 시스템 도우미
/// </summary>
private FileSystemHelper fileSystemHelper = new FileSystemHelper();
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainWindow()
/// <summary>
/// 생성자
/// </summary>
public MainWindow()
{
InitializeComponent();
InitializeDrive();
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 트리 리스트 뷰 노드 확장시 처리하기 - treeListView_NodeExpanding(sender, e)
/// <summary>
/// 트리 리스트 뷰 노드 확장시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void treeListView_NodeExpanding(object sender, TreeListNodeAllowEventArgs e)
{
TreeListNode treeListNode = e.Node;
if(treeListNode.Tag == null || (bool)treeListNode.Tag == false)
{
BuildChildNode(treeListNode);
treeListNode.Tag = true;
}
}
#endregion
#region 드라이브 초기화 하기 - InitializeDrive()
/// <summary>
/// 드라이브 초기화 하기
/// </summary>
public void InitializeDrive()
{
this.gridControl.BeginDataUpdate();
try
{
string[] driveArray = this.fileSystemHelper.GetLogicalDriveArray();
foreach(string drive in driveArray)
{
TreeListNode rootNode = new TreeListNode() { Content = new FileSystemItem(drive, "Drive", "<Drive>", drive) };
this.treeListView.Nodes.Add(rootNode);
rootNode.IsExpandButtonVisible = DefaultBoolean.True;
}
}
catch
{
}
this.gridControl.EndDataUpdate();
}
#endregion
#region 자식 노드 구축하기 - BuildChildNode(parentNode)
/// <summary>
/// 자식 노드 구축하기
/// </summary>
/// <param name="parentNode">부모 노드</param>
private void BuildChildNode(TreeListNode parentNode)
{
this.gridControl.BeginDataUpdate();
BuildFolderChildNode(parentNode);
BuildFileChildNode(parentNode);
this.gridControl.EndDataUpdate();
}
#endregion
#region 파일 자식 노드 구축하기 - BuildFileChildNode(parentNode)
/// <summary>
/// 파일 자식 노드 구축하기
/// </summary>
/// <param name="parentNode">부모 노드</param>
private void BuildFileChildNode(TreeListNode parentNode)
{
FileSystemItem fileSystemItem = parentNode.Content as FileSystemItem;
if(fileSystemItem == null)
{
return;
}
try
{
string[] filePathArray = this.fileSystemHelper.GetFilePathArray(fileSystemItem.FullName);
foreach(string filePath in filePathArray)
{
TreeListNode childNode = new TreeListNode()
{
Content = new FileSystemItem
(
this.fileSystemHelper.GetFileName(filePath),
"File",
this.fileSystemHelper.GetFileSize(filePath).ToString(),
filePath
)
};
childNode.IsExpandButtonVisible = DefaultBoolean.False;
parentNode.Nodes.Add(childNode);
}
}
catch
{
}
}
#endregion
#region 폴더 자식 노드 구축하기 - BuildFolderChildNode(parentNode)
/// <summary>
/// 폴더 자식 노드 구축하기
/// </summary>
/// <param name="parentNode">부모 노드</param>
private void BuildFolderChildNode(TreeListNode parentNode)
{
FileSystemItem fileSystemItem = parentNode.Content as FileSystemItem;
if(fileSystemItem == null)
{
return;
}
try
{
string[] directoryPathArray = this.fileSystemHelper.GetDirectoryPathArray(fileSystemItem.FullName);
foreach(string directoryPath in directoryPathArray)
{
try
{
TreeListNode childNode = new TreeListNode()
{
Content = new FileSystemItem
(
this.fileSystemHelper.GetDirectoryName(directoryPath),
"Folder",
"<Folder>",
directoryPath
)
};
parentNode.Nodes.Add(childNode);
childNode.IsExpandButtonVisible = HasChildren(directoryPath) ? DefaultBoolean.True : DefaultBoolean.False;
}
catch
{
}
}
}
catch
{
}
}
#endregion
#region 자식 보유 여부 조사하기 - HasFiles(directoryPath)
/// <summary>
/// 자식 보유 여부 조사하기
/// </summary>
/// <param name="directoryPath">디렉토리 경로</param>
/// <returns>자식 보유 여부</returns>
private bool HasChildren(string directoryPath)
{
string[] filePathArray = this.fileSystemHelper.GetFilePathArray(directoryPath);
if(filePathArray.Length > 0)
{
return true;
}
string[] childDirectoryPathArray = this.fileSystemHelper.GetDirectoryPathArray(directoryPath);
if(childDirectoryPathArray.Length > 0)
{
return true;
}
return false;
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'DevExpress > WPF' 카테고리의 다른 글
[DEVEXPRESS/WPF] GridControl 클래스 : 엔터티 프레임워크 4.0 연동 인스턴트 피드백 모드 활성화 하기 (0) | 2018.02.23 |
---|---|
[DEVEXPRESS/WPF] SQL 데이터베이스 변경 사항 저장하기 (0) | 2018.02.23 |
[DEVEXPRESS/WPF] 데이터 주석 적용하기 (0) | 2018.02.21 |
[DEVEXPRESS/WPF] ICollectionView 인터페이스 : DXGrid 바인딩 하기 (0) | 2018.02.21 |
[DEVEXPRESS/WPF] 노드 반복자를 통해 노드를 반복하기 (0) | 2018.02.21 |
[DEVEXPRESS/WPF] 느슨하게 결합된 뷰 모델 사용하기 (0) | 2018.02.17 |
[DEVEXPRESS/WPF] CurrentWindowService 클래스 : 윈도우 닫기 (0) | 2018.02.17 |
[DEVEXPRESS/WPF] BarManager 클래스 : BarSplitButtonItem 항목 생성하기 (0) | 2018.02.02 |
[DEVEXPRESS/WPF] BarManager 클래스 : BarStaticItem 항목 생성하기 (0) | 2018.02.02 |
[DEVEXPRESS/WPF] BarManager 클래스 : 에디터 내장하기 (0) | 2018.02.02 |
댓글을 달아 주세요