本篇描述PivotGridControl控件绑定显示数据,以及一些属性的使用,显示的优化。
一、绑定数据源,显示网格。
下图为一份员工跟进统计表(跟进可以理解为某个人对某事或物的跟进)
行区域RowArea:显示部门以及员工
列区域ColumnArea:显示跟进时间
数据区域DataArea:显示跟进人次
代码:
//声明行区域显示字段
var colDeptName = new PivotGridField
{
Area = PivotArea.RowArea,
AreaIndex = 0,
FieldName = "DeptName",
Caption = "部门",
Name = "colDeptName",
};
var colEmpName = new PivotGridField
{
Area = PivotArea.RowArea,
AreaIndex = 1,
FieldName = "EmpName",
Name = "colEmpName",
Caption = "员工"
};
//声明列区域显示字段
var colDate = new PivotGridField
{
Area = PivotArea.ColumnArea,
AreaIndex = 0,
FieldName = "Date",
Name = "colDate",
Caption = "日期",
//该属性配合自定义显示字段值的换行显示,这里为显示两行
ColumnValueLineCount = 2,
};
//声明数据区域显示字段
var colEmpID = new PivotGridField
{
Area = PivotArea.DataArea,
AreaIndex = 0,
FieldName = "EmpID",
Name = "colEmpID",
Caption = "数量",
//这里设置数据区的统计类型为统计数量
SummaryType = PivotSummaryType.Count
};
//给PivotGrid添加绑定显示字段
pivotGridControl.Fields.AddRange(new[] { colDeptName, colEmpName, colDate, colEmpID});
//查询要显示的数据源list或datatable都可以
List<EmployeeDayWeekMonthReport> list = new List<EmployeeDayWeekMonthReport>();
BoardPara para = new BoardPara();
//...查询sql(查询需要汇总,统计的数据)
var obj = JsonConvertHelper.SerializeObject(para, new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd" });
list = GetApi<List<EmployeeDayWeekMonthReport>>("obj=" + obj.Replace("+", "2B%"), "Board/GetWeekReport");
//最终,给绑定数据源
pivotGridControl.DataSource = list;
二、优化显示
1、隐藏网格顶部部分
//获取或设置不显示筛选器标头。
pivotGridControl.OptionsView.ShowFilterHeaders = false;
//获取或设置不显示数据头。
pivotGridControl.OptionsView.ShowDataHeaders = false;
//获取或设置列总计的位置,Far:右侧,Near:左侧
pivotGridControl.OptionsView.ColumnTotalsLocation = PivotTotalsLocation.Far;
//设置不显示列标题
pivotGridControl.OptionsView.ShowColumnHeaders = false;
2、自定义数据区显示值
方法一:(不建议使用)
首先,设置数据区域字段的一个属性,GroupInterval属
//设置当前列或行字段的值是如何组合成组的。
colDate.GroupInterval = PivotGroupInterval.Custom;
其次,使用pivortGridControl的CustomGroupInterval事件
/// <summary>
/// 自定义组间间隔
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gc_CustomGroupInterval(object sender, PivotCustomGroupIntervalEventArgs e)
{
//因为列区域字段绑定的是日期字段,所以e.Value取得的是字段的值,通过自定义值的显示,
//PivortGridControl会自动为自定义后的显示值类型的数据进行汇总。
e.GroupValue = Convert.ToDateTime(e.Value).Month + "/" +
Convert.ToDateTime(e.Value).Day + "\r\n" +
Convert.ToDateTime(e.Value).ToString("ddd");
}
//若想要自定义显示换行还需要设置以下属性
pivotGridControl.Appearance.FieldValue.TextOptions.HAlignment = HorzAlignment.Center;
pivotGridControl.Appearance.FieldValue.TextOptions.WordWrap = WordWrap.Wrap;
方法二:
在pivotGridControl控件,字段的显示值事件中设置数据区字段的显示
/// <summary>
/// 设置字段的显示值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gc_FieldValueDisplayText(object sender, PivotFieldDisplayTextEventArgs e)
{
if (e.ValueType == PivotGridValueType.Value && e.Field.FieldName == "Date")
{
e.DisplayText = Convert.ToDateTime(e.Value).Month + "/" +
Convert.ToDateTime(e.Value).Day + "\r\n" +
Convert.ToDateTime(e.Value).ToString("ddd");
}
}
最终显示样式: