[DEVEXPRESS/WPF] GridControl 클래스 : CustomColumnDisplayText 이벤트를 사용해 커스텀 컬럼 디스플레이 텍스트 처리하기
DevExpress/WPF 2014. 3. 16. 09:00728x90
반응형
728x170
▶ XAML
<Grid
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid">
<dxg:GridControl x:Name="gridControl"
CustomColumnGroup="gridControl_CustomColumnGroup"
CustomGroupDisplayText="gridControl_CustomGroupDisplayText">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="ProductName" />
<dxg:GridColumn FieldName="UnitsInStock" />
<dxg:GridColumn FieldName="UnitsOnOrder" />
<dxg:GridColumn
FieldName="UnitPrice"
SortMode="Custom">
<dxg:GridColumn.EditSettings>
<dxe:SpinEditSettings DisplayFormat="c2" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView />
</dxg:GridControl.View>
</dxg:GridControl>
</Grid>
728x90
▶ C#
using DevExpress.Xpf.Grid;
...
this.gridControl.ItemsSource = new NorthwindEntities().Products;
this.gridControl.Columns["UnitPrice"].GroupIndex = 0;
...
#region 그리드 컨트롤 커스텀 컬럼 그룹 처리하기 - gridControl_CustomColumnGroup(sender, e)
/// <summary>
/// 그리드 컨트롤 커스텀 컬럼 그룹 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void gridControl_CustomColumnGroup(object sender, CustomColumnSortEventArgs e)
{
if(e.Column.FieldName == "UnitPrice")
{
double value1 = Math.Floor(Convert.ToDouble(e.Value1) / 10);
double value2 = Math.Floor(Convert.ToDouble(e.Value2) / 10);
int compareResult = Comparer.Default.Compare(value1, value2);
if(value1 > 9 && value2 > 9)
{
compareResult = 0;
}
e.Result = compareResult;
e.Handled = true;
}
}
#endregion
#region 그리드 컨트롤 커스텀 그룹 표시 텍스트 처리하기 - gridControl_CustomGroupDisplayText(sender, e)
/// <summary>
/// 그리드 컨트롤 커스텀 그룹 표시 텍스트 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void gridControl_CustomGroupDisplayText(object sender, CustomGroupDisplayTextEventArgs e)
{
if(e.Column.FieldName != "UnitPrice")
{
return;
}
int groupLevel = this.gridControl.GetRowLevelByRowHandle(e.RowHandle);
if(groupLevel != e.Column.GroupIndex)
{
return;
}
string interval = GetIntervalString(e.Value);
e.DisplayText = interval;
}
#endregion
#region 간격 문자열 구하기 - GetIntervalString(value)
/// <summary>
/// 간격 문자열 구하기
/// </summary>
/// <param name="value">값</param>
/// <returns>간격 문자열</returns>
private string GetIntervalString(object value)
{
double valueDouble = Math.Floor(Convert.ToDouble(value) / 10);
string interval = string.Format("{0:c} - {1:c} ", valueDouble * 10, (valueDouble + 1) * 10);
if(valueDouble > 9)
{
interval = string.Format(">= {0:c} ", 100);
}
return interval;
}
#endregion
728x90
반응형
그리드형(광고전용)
댓글을 달아 주세요