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

728x90
반응형

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

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


TestProject.zip


MainForm.cs

 

 

using System.IO;

using System.Windows.Forms;

 

using DevExpress.Utils;

using DevExpress.XtraEditors;

using DevExpress.XtraTreeList;

using DevExpress.XtraTreeList.Columns;

using DevExpress.XtraTreeList.Nodes;

 

namespace TestProject

{

    /// <summary>

    /// 메인 폼

    /// </summary>

    public partial class MainForm : XtraForm

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// 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.StateImageList                 = this.imageList;

            

            this.treeList.BeforeExpand  += treeList_BeforeExpand;

            this.treeList.AfterExpand   += treeList_AfterExpand;

            this.treeList.AfterCollapse += treeList_AfterCollapse;

 

            AddFolderNode("C:\\", null);

 

            this.treeList.BestFitColumns();

        }

 

        #endregion

 

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

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

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

 

        #region 트리 리스트 확장 전 처리하기 - treeList_BeforeExpand(sender, e)

 

        /// <summary>

        /// 트리 리스트 확장 전 처리하기

        /// </summary>

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

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

        private void treeList_BeforeExpand(object sender, BeforeExpandEventArgs e)

        {

            if(e.Node.Tag != null)

            {

                Cursor cursor = Cursor.Current;

 

                Cursor.Current = Cursors.WaitCursor;

 

                AddFolderNode(e.Node.GetDisplayText("FullName"), e.Node);

 

                e.Node.Tag = null;

 

                Cursor.Current = cursor;

            }

        }

 

        #endregion

        #region 트리 리스트 확장 후 처리하기 - treeList_AfterExpand(sender, e)

 

        /// <summary>

        /// 트리 리스트 확장 후 처리하기

        /// </summary>

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

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

        private void treeList_AfterExpand(object sender, NodeEventArgs e)

        {

            if(e.Node.StateImageIndex != 1)

            {

                e.Node.StateImageIndex = 2;

            }

        }

 

        #endregion

        #region 트리 리스트 축소 후 처리하기 - treeList_AfterCollapse(sender, e)

 

        /// <summary>

        /// 트리 리스트 축소 후 처리하기

        /// </summary>

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

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

        private void treeList_AfterCollapse(object sender, NodeEventArgs e)

        {

            if(e.Node.StateImageIndex != 1)

            {

                e.Node.StateImageIndex = 0;

            }

        }

 

        #endregion

 

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

 

        #region 파일 소유 여부 구하기 - HasFile(parentPath)

 

        /// <summary>

        /// 파일 소유 여부 구하기

        /// </summary>

        /// <param name="parentPath">부모 경로</param>

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

        private bool HasFile(string parentPath)

        {

            string[] pathArray = Directory.GetFiles(parentPath);

 

            if(pathArray.Length > 0)

            {

                return true;

            }

 

            pathArray = Directory.GetDirectories(parentPath);

 

            if(pathArray.Length > 0)

            {

                return true;

            }

 

            return false;

        }

 

        #endregion

        #region 파일 노드 추가하기 - AddFileNode(parentPath, parentNode)

 

        /// <summary>

        /// 파일 노드 추가하기

        /// </summary>

        /// <param name="parentPath">부모 경로</param>

        /// <param name="parentNode">부모 노드</param>

        private void AddFileNode(string parentPath, TreeListNode parentNode)

        {

            TreeListNode node;

 

            FileInfo fileInfo;

 

            try

            {

                string[] pathArray = Directory.GetFiles(parentPath);

 

                foreach(string path in pathArray)

                {

                    fileInfo = new FileInfo(path);

 

                    node = this.treeList.AppendNode

                    (

                        new object[]

                        {

                            path,

                            fileInfo.Name,

                            "File",

                            fileInfo.Length

                        },

                        parentNode

                    );

 

                    node.StateImageIndex = 1;

 

                    node.HasChildren = false;

                }

            }

            catch

            {

            }

        }

 

        #endregion

        #region 폴더 노드 추가하기 - AddFolderNode(parentPath, parentNode)

 

        /// <summary>

        /// 폴더 노드 추가하기

        /// </summary>

        /// <param name="parentPath">부모 경로</param>

        /// <param name="parentNode">부모 노드</param>

        private void AddFolderNode(string parentPath, TreeListNode parentNode)

        {

            this.treeList.BeginUnboundLoad();

 

            TreeListNode  node;

            DirectoryInfo directoryInfo;

 

            try

            {

                string[] pathArray = Directory.GetDirectories(parentPath);

 

                foreach(string path in pathArray)

                {

                    try

                    {

                        directoryInfo = new DirectoryInfo(path);

 

                        node = treeList.AppendNode

                        (

                            new object[]

                            {

                                path,

                                directoryInfo.Name,

                                "Folder",

                                null

                            },

                            parentNode

                        );

 

                        node.StateImageIndex = 0;

 

                        node.HasChildren = HasFile(path);

 

                        if(node.HasChildren)

                        {

                            node.Tag = true;

                        }

                    }

                    catch

                    {

                    }

                }

            }

            catch

            {

            }

 

            AddFileNode(parentPath, parentNode);

 

            this.treeList.EndUnboundLoad();

        }

 

        #endregion

    }

}

 

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

728x90
반응형

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

[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
[DEVEXPRESS/WINFORM] TreeList 클래스 : GetStateImage 이벤트를 사용해 노드 상태 이미지 설정하기  (0) 2020.05.30
Posted by 사용자 icodebroker

댓글을 달아 주세요