첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ TreeList 클래스 : VirtualTreeGetChildNodes 이벤트를 사용해 언바운드 모드 데이터 동적 로딩하기

------------------------------------------------------------------------------------------------------------------------


TestProject.zip


MainForm.cs

 

 

using System;

using System.IO;

 

using DevExpress.Utils;

using DevExpress.XtraEditors;

using DevExpress.XtraTreeList;

using DevExpress.XtraTreeList.Columns;

 

namespace TestProject

{

    /// <summary>

    /// 메인 폼

    /// </summary>

    public partial class MainForm : XtraForm

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// 드라이브 로드 여부

        /// </summary>

        private bool driveLoaded = false;

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainForm()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainForm()

        {

            InitializeComponent();

 

            TreeListColumn fullNameColumn = new TreeListColumn();

 

            fullNameColumn.FieldName = "FullName";

            fullNameColumn.Caption   = "FullName";

 

            TreeListColumn nameColumn = new TreeListColumn();

 

            nameColumn.FieldName    = "Name";

            nameColumn.Caption      = "Name";

            nameColumn.MinWidth     = 30;

            nameColumn.Width        = 250;

            nameColumn.VisibleIndex = 0;

 

            TreeListColumn typeColumn = new TreeListColumn();

 

            typeColumn.FieldName    = "Type";

            typeColumn.Caption      = "Type";

            typeColumn.Width        = 100;

            typeColumn.VisibleIndex = 1;

 

            TreeListColumn sizeColumn = new TreeListColumn();

 

            sizeColumn.FieldName                             = "Size";

            sizeColumn.Caption                               = "Size(Bytes)";

            sizeColumn.AppearanceCell.Options.UseTextOptions = true;

            sizeColumn.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Far;

            sizeColumn.Format.FormatType                     = FormatType.Numeric;

            sizeColumn.Format.FormatString                   = "n0";

            sizeColumn.Width                                 = 100;

            sizeColumn.VisibleIndex                          = 2;

 

            this.treeList.Columns.AddRange

            (

                new TreeListColumn[]

                {

                    fullNameColumn,

                    nameColumn,

                    typeColumn,

                    sizeColumn

                }

            );

 

            this.treeList.OptionsView.AutoWidth          = false;

            this.treeList.OptionsBehavior.AutoNodeHeight = false;

            this.treeList.OptionsBehavior.Editable       = false;

            this.treeList.SelectImageList                = this.svgImageCollection;

 

            Load                                   += Form_Load;

            this.treeList.VirtualTreeGetCellValue  += treeList_VirtualTreeGetCellValue;

            this.treeList.VirtualTreeGetChildNodes += treeList_VirtualTreeGetChildNodes;

            this.treeList.GetSelectImage           += treeList_GetSelectImage;

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Private

        //////////////////////////////////////////////////////////////////////////////// Event

 

        #region 폼 로드시 처리하기 - Form_Load(sender, e)

 

        /// <summary>

        /// 폼 로드시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void Form_Load(object sender, EventArgs e)

        {

            this.treeList.DataSource = new object();

        }

 

        #endregion

        #region 트리 리스트 가상 트리 셀 값 구하기 - treeList_VirtualTreeGetCellValue(sender, e)

 

        /// <summary>

        /// 트리 리스트 가상 트리 셀 값 구하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void treeList_VirtualTreeGetCellValue(object sender, VirtualTreeGetCellValueInfo e)

        {

            DirectoryInfo directoryInfo = new DirectoryInfo((string)e.Node);

 

            if(e.Column.FieldName == "FullName")

            {

                e.CellData = directoryInfo.FullName;

            }

            else if(e.Column.FieldName == "Name")

            {

                e.CellData = directoryInfo.Name;

            }

            else if(e.Column.FieldName == "Type")

            {

                if(!IsFile(directoryInfo))

                {

                    e.CellData = "Folder";

                }

                else

                {

                    e.CellData = "File";

                }

            }

            else if(e.Column.FieldName == "Size")

            {

                if(IsFile(directoryInfo))

                {

                    e.CellData = new FileInfo((string)e.Node).Length;

                }

                else

                {

                    e.CellData = null;

                }

            }

        }

 

        #endregion

        #region 트리 리스트 가상 트리 자식 노드 구하기 - treeList_VirtualTreeGetChildNodes(sender, e)

 

        /// <summary>

        /// 트리 리스트 가상 트리 자식 노드 구하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void treeList_VirtualTreeGetChildNodes(object sender, VirtualTreeGetChildNodesInfo e)

        {

            if(!this.driveLoaded)

            {

                string[] driveArray = Directory.GetLogicalDrives();

 

                e.Children = driveArray;

 

                this.driveLoaded = true;

            }

            else

            {

                try

                {

                    string path  = (string)e.Node;

 

                    if(Directory.Exists(path))

                    {

                        string[] directoryPathArray = Directory.GetDirectories(path);

                        string[] filePathArray      = Directory.GetFiles(path);

                        string[] pathArray          = new string[directoryPathArray.Length + filePathArray.Length];

 

                        directoryPathArray.CopyTo(pathArray,0);

 

                        filePathArray.CopyTo(pathArray,directoryPathArray.Length);

 

                        e.Children = pathArray;

                    }

                    else

                    {

                        e.Children = new object[] { };

                    }

                }

                catch

                {

                    e.Children = new object[] { };

                }

            }

        }

 

        #endregion

        #region 트리 리스트 선택 이미지 구하기 - treeList_GetSelectImage(sender, e)

 

        /// <summary>

        /// 트리 리스트 선택 이미지 구하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void treeList_GetSelectImage(object sender, GetSelectImageEventArgs e)

        {

            TreeList treeList = sender as TreeList;

 

            string type = treeList.GetRowCellValue(e.Node, treeList.Columns["Type"]).ToString();

 

            if(type == "Folder")

            {

                e.NodeImageIndex = 0;

            }

            else

            {

                e.NodeImageIndex = 1;

            }

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////// Function

 

        #region 파일 여부 구하기 - IsFile(directoryInfo)

 

        /// <summary>

        /// 파일 여부 구하기

        /// </summary>

        /// <param name="directoryInfo">디렉토리 정보</param>

        /// <returns>파일 여부</returns>

        private bool IsFile(DirectoryInfo directoryInfo)

        {

            return (directoryInfo.Attributes & FileAttributes.Directory) == 0;

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

'DevExpress > WinForm' 카테고리의 다른 글

[DEVEXPRESS/WINFORM] TreeList 클래스 : DragEnter/DragDrop/DragOver 이벤트를 사용해 드래그 & 드롭 사용하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeListColumn 클래스 : Format 속성을 사용해 컬럼 포맷 설정하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeListNode 클래스 : Expanded 속성을 사용해 노드 확장하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : 밴드 레이아웃 사용하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeListColumn 클래스 : GetEnumerator 메소드를 사용해 자식 노드 값 변경하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : VirtualTreeGetChildNodes 이벤트를 사용해 언바운드 모드 데이터 동적 로딩하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : BeforeExpand 이벤트를 사용해 언바운드 모드 데이터 동적 로딩하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : AppendNode 메소드를 사용해 언바운드 모드 노드 만들기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : CustomDrawNodeImages 이벤트를 사용해 노드 이미지 커스텀 그리기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : GetSelectImage 이벤트를 사용해 포커스 노드 이미지 설정하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : GetStateImage 이벤트를 사용해 체크 노드 상태 이미지 설정하기  (0) 2020.05.30
Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요