728x90
반응형
728x170
▶ MainForm.cs
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using DevExpress.XtraEditors;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Columns;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : XtraForm
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
Load += Form_Load;
this.treeList.CustomDrawColumnHeader += treeList_CustomDrawColumnHeader;
this.treeList.CustomDrawNodeIndicator += treeList_CustomDrawNodeIndicator;
this.treeList.CustomDrawFooter += treeList_CustomDrawFooter;
this.treeList.CustomDrawFooterCell += treeList_CustomDrawFooterCell;
}
#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.RowHeight = 25;
this.treeList.OptionsView.AutoWidth = false;
this.treeList.OptionsView.ShowSummaryFooter = true;
this.treeList.OptionsBehavior.ReadOnly = true;
this.treeList.OptionsBehavior.PopulateServiceColumns = true;
this.treeList.KeyFieldName = "ID";
this.treeList.ParentFieldName = "RegionID";
this.treeList.DataSource = SalesData.GetSalesDataList();
this.treeList.Columns[this.treeList.KeyFieldName ].Visible = false;
this.treeList.Columns[this.treeList.ParentFieldName].Visible = false;
TreeListColumn salesColumn = this.treeList.Columns["Sales"];
salesColumn.AllNodesSummary = true;
salesColumn.SummaryFooter = SummaryItemType.Sum;
salesColumn.SummaryFooterStrFormat = "합계 : {0:c0}";
this.treeList.BestFitColumns();
}
#endregion
#region 트리 리스트 컬럼 헤더 커스텀 그리기 - treeList_CustomDrawColumnHeader(sender, e)
/// <summary>
/// 트리 리스트 컬럼 헤더 커스텀 그리기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void treeList_CustomDrawColumnHeader(object sender, CustomDrawColumnHeaderEventArgs e)
{
if(e.Pressed)
{
PaintSunkenBackground(e);
}
else
{
PaintRaisedBackground(e);
}
if(e.ColumnType == HitInfoType.Column)
{
PaintHorizontalAlignedText(e, e.Column.GetCaption(), StringAlignment.Near);
}
e.Handled = true;
}
#endregion
#region 트리 리스트 노드 지시자 커스텀 그리기 - treeList_CustomDrawNodeIndicator(sender, e)
/// <summary>
/// 트리 리스트 노드 지시자 커스텀 그리기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void treeList_CustomDrawNodeIndicator(object sender, CustomDrawNodeIndicatorEventArgs e)
{
PaintRaisedBackground(e);
e.Handled = true;
}
#endregion
#region 트리 리스트 FOOTER 커스텀 그리기 - treeList_CustomDrawFooter(sender, e)
/// <summary>
/// 트리 리스트 FOOTER 커스텀 그리기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void treeList_CustomDrawFooter(object sender, CustomDrawEventArgs e)
{
PaintRaisedBackground(e);
e.Handled = true;
}
#endregion
#region 트리 리스트 FOOTER 셀 커스텀 그리기 - treeList_CustomDrawFooterCell(sender, e)
/// <summary>
/// 트리 리스트 FOOTER 셀 커스텀 그리기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void treeList_CustomDrawFooterCell(object sender, CustomDrawFooterCellEventArgs e)
{
if(e.Text == string.Empty)
{
return;
}
PaintSunkenBackground(e);
PaintHorizontalAlignedText(e, e.Text, StringAlignment.Far);
e.Handled = true;
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Function
#region 돌출 배경 칠하기 - PaintRaisedBackground(e)
/// <summary>
/// 돌출 배경 칠하기
/// </summary>
/// <param name="e">이벤트 인자</param>
private void PaintRaisedBackground(CustomDrawEventArgs e)
{
Brush brush = e.Cache.GetGradientBrush(e.Bounds, Color.Yellow, Color.Gold, LinearGradientMode.Vertical);
e.Cache.FillRectangle(brush, e.Bounds);
e.Cache.DrawRectangle(e.Cache.GetPen(Color.LightGray), e.Bounds);
}
#endregion
#region 함몰 배경 칠하기 - PaintSunkenBackground(e)
/// <summary>
/// 함몰 배경 칠하기
/// </summary>
/// <param name="e">이벤트 인자</param>
private void PaintSunkenBackground(CustomDrawEventArgs e)
{
Brush brush = e.Cache.GetGradientBrush(e.Bounds, Color.CornflowerBlue, Color.LightGray, LinearGradientMode.Vertical);
e.Cache.FillRectangle(brush, e.Bounds);
e.Cache.DrawRectangle(e.Cache.GetPen(Color.LightGray), e.Bounds);
}
#endregion
#region 수평 정렬 텍스트 칠하기 - PaintHorizontalAlignedText(e, text, alignment)
/// <summary>
/// 수평 정렬 텍스트 칠하기
/// </summary>
/// <param name="e">이벤트 인자</param>
/// <param name="text">텍스트</param>
/// <param name="alignment">정렬</param>
private void PaintHorizontalAlignedText(CustomDrawEventArgs e, String text, StringAlignment alignment)
{
Brush textBrush = e.Cache.GetSolidBrush(Color.Black);
StringFormat stringFormat = e.Appearance.GetStringFormat();
stringFormat.Alignment = alignment;
stringFormat.LineAlignment = StringAlignment.Center;
stringFormat.FormatFlags = StringFormatFlags.NoWrap;
stringFormat.Trimming = StringTrimming.EllipsisCharacter;
e.Cache.DrawString(text, e.Appearance.Font, textBrush, e.Bounds, stringFormat);
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
댓글을 달아 주세요