本文档演示了如何定制位于不同分组层级中的分组行的外观。 要获得关于外观技术的信息,请参阅 外观概述 主题。
为分组行应用样式
在 分组模式 中,分组行 被用于把有相同取值的行组合到分组列中。 在默认情况下,所有分组行都被使用由 GridViewAppearances.GroupRow 属性提供的外观设置进行绘制。
分组行形成树。 分组行所在的嵌套的层级 (分组层级) 被使用相应的分组列进行关联。 在下面的插图中显示了一个示例网格视图的分组层级:
要根据分组行的嵌套层级为分组行提供不同的外观,则可以接管 GridView.GroupLevelStyle 事件。 如果需要指定个别分组行的外观,则可以接管 GridView.RowStyle 或 GridView.CustomDrawGroupRow 事件。 后一个事件也提供了实现复杂的分组行绘制的功能。
GridView.GroupLevelStyle 事件为行的每个组依次发生。 当前被处理的组的嵌套层级可以通过 GroupLevelStyleEventArgs.Level 参数获得。
要通过此事件改变分组行的外观设置,则修改事件的 GroupLevelStyleEventArgs.LevelAppearance 参数。
下面的示例演示了如何为分组行提供样式,这些样式与用于绘制相应分组的列标头的样式相匹配。 在窗体的 Load 事件中,定制了特定列的外观。
在 GridView.GroupLevelStyle 事件的处理程序中,对应于当前被处理的分组层级的分组列被标识。 然后,通过 AppearanceObject.Combine 方法,列标头的外观与分组行的外观相结合。自定义的结果如下图所示。 视图的 BaseView.PaintStyleName 属性值被设置为“UltraFlat”:
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraGrid.Columns; using DevExpress.Utils; private void Form1_Load(object sender, System.EventArgs e) { // ... InitStyles(); } private void InitStyles() { GridView View = gridControl1.MainView as GridView; // Customize the column headers' appearances. AppearanceObject appCountry = View.Columns["Country"].AppearanceHeader; appCountry.BackColor = Color.AntiqueWhite; appCountry.BackColor2 = Color.Snow; View.Columns["City"].AppearanceHeader.BackColor = Color.LightSalmon; // Set the View's painting syle. View.PaintStyleName = "UltraFlat"; } private void gridView1_GroupLevelStyle(object sender, GroupLevelStyleEventArgs e) { GridView View = sender as GridView; GridColumn column = View.GroupedColumns[e.Level]; if(column == null) return; e.LevelAppearance.Combine(column.AppearanceHeader); } |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraGrid.Views.Grid Imports DevExpress.XtraGrid.Columns Imports DevExpress.Utils ' ... Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load ' ... InitStyles() End Sub Private Sub InitStyles() Dim View As GridView = GridControl1.MainView ' Customize the column headers' appearances. Dim appCountry As AppearanceObject = View.Columns("Country").AppearanceHeader appCountry.BackColor = Color.AntiqueWhite appCountry.BackColor2 = Color.Snow View.Columns("City").AppearanceHeader.BackColor = Color.LightSalmon ' Set the View's painting syle. View.PaintStyleName = "UltraFlat" End Sub Private Sub GridView1_GroupLevelStyle(ByVal sender As Object, _ ByVal e As DevExpress.XtraGrid.Views.Grid.GroupLevelStyleEventArgs) _ Handles GridView1.GroupLevelStyle Dim View As GridView = CType(sender, GridView) Dim column As GridColumn = View.GroupedColumns(e.Level) If column Is Nothing Then Return e.LevelAppearance.Combine(column.AppearanceHeader) End Sub |