XtraGrid 从版本 3 以上,就可以使用 外观技术 定制。 本文档演示了如何为个别行与单元格指定外观设置。
定制行与单元格的外观的基础
XtraGrid 提供了许多可以用于定制行与单元格外观的方法:
- GridViewAppearances.Row 属性可以用于为网格视图内的所有行 (因此也为单元格) 提供公共外观设置。 对于卡片视图,则使用 CardViewAppearances.Card 属性来代替。
- GridViewAppearances.EvenRow 和 GridViewAppearances.OddRow 能够用于个别地定制网格视图中的偶数行和奇数行。
- GridViewAppearances.FocusedRow、GridViewAppearances.FocusedCell、GridViewAppearances.SelectedRow 和 GridViewAppearances.HideSelectionRow 属性可以用于定制获得焦点的行/单元格和选中行的外观。
- 列的 GridColumn.AppearanceCell 属性可以用于定制位于特定列中的单元格的外观。 请参阅 定制个别列、卡片字段与带区的外观 主题来获得更多信息。
- 根据自定义条件来定制特定行的外观,则使用 样式的格式化条件 是简单的方式。
如果这些技术不符合需求,则可以使用更灵活的 Appearance 特定事件:
- GridView.RowStyle 事件。 可以接管此事件来定制个别行的外观。 它发生在 GridView.RowCellStyle 事件之前。
- GridView.RowCellStyle 事件允许定制特定单元格的外观。
- GridView.CustomDrawCell 事件可以与 GridView.RowCellStyle 事件相同的方式使用。 请参阅 自定义绘制基础 文档获得更多关于自定义绘制事件的细节。
定制行的外观
在下面的示例中,接管了 GridView.RowStyle 事件,来定制在 Category 列中有“Beverages”取值的行的外观。 使用渐变填充绘制这些行。 渐变起始色和结束色是通过 AppearanceObject.BackColor 和 AppearanceObject.BackColor2 属性 (是事件的 RowStyleEventArgs.Appearance 对象参数的成员) 指定的。
结果显示在下面。 注意,渐变被应用于整个行,而不是个别单元格:
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid.Views.Grid; private void gridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e) { GridView View = sender as GridView; if(e.RowHandle >= 0) { string category = View.GetRowCellDisplayText(e.RowHandle, View.Columns["Category"]); if(category == "Beverages") { e.Appearance.BackColor = Color.Salmon; e.Appearance.BackColor2 = Color.SeaShell; } } } |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraGrid.Views.Grid Private Sub GridView1_RowStyle(ByVal sender As Object, _ ByVal e As DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs) Handles GridView1.RowStyle Dim View As GridView = sender If (e.RowHandle >= 0) Then Dim category As String = View.GetRowCellDisplayText(e.RowHandle, View.Columns("Category")) If category = "Beverages" Then e.Appearance.BackColor = Color.Salmon e.Appearance.BackColor2 = Color.SeaShell End If End If End Sub |
定制单元格的外观
下面的示例演示了使用 GridView.RowCellStyle 事件。 对网格视图中的每个单元格,此事件都发生,因此它有 Column 和 RowHandle 参数,来标识被绘制的单元格。
下面的插图展示了运行结果。 注意,与前面的示例不同,渐变是应用于个别单元格的,而不是整个行。
在下面的示例中,对于“Count” 和 “Unit Price” 列中的单元格,如果它们所在的行中的“Category”列包含了“Seafood”字符串,则它们的外观被定制。
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid.Views.Grid; // ... private void gridView1_RowCellStyle(object sender, RowCellStyleEventArgs e) { GridView View = sender as GridView; if(e.Column.FieldName == "Count" || e.Column.FieldName == "Unit Price") { string category = View.GetRowCellDisplayText(e.RowHandle, View.Columns["Category"]); if(category == "Seafood") { e.Appearance.BackColor = Color.DeepSkyBlue; e.Appearance.BackColor2 = Color.LightCyan; } } } |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraGrid.Views.Grid ' ... Private Sub GridView1_RowCellStyle(ByVal sender As Object, _ ByVal e As RowCellStyleEventArgs) Handles GridView1.RowCellStyle Dim View As GridView = sender If e.Column.FieldName = "Count" Or e.Column.FieldName = "Unit Price" Then Dim category As String = View.GetRowCellDisplayText(e.RowHandle, View.Columns("Category")) If category = "Seafood" Then e.Appearance.BackColor = Color.DeepSkyBlue e.Appearance.BackColor2 = Color.LightCyan End If End If End Sub |