全局外观设置
GridView.Appearance提供了对多个属性部分的访问。这些部分存储偶数行和奇数行、聚焦单元格、列标题等的外观属性。
高亮显示属于特定列的单元格
每列都有自己的GridColumn.AppearanceCell属性,用于覆盖属于此列的所有单元格的全局外观和文本格式设置。
private void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
{
GridColumn colID = gridView1.Columns["patient_id"];
colID.AppearanceCell.BackColor2 = Color.DarkGreen;
colID.AppearanceCell.BackColor = Color.LightGreen;
colID.AppearanceCell.ForeColor = Color.White;
GridColumn colName = gridView1.Columns["charge_total"];
colName.AppearanceCell.BackColor = Color.Brown;
colName.AppearanceCell.ForeColor = Color.Yellow;
GridColumn colRecordDate = gridView1.Columns["cash_date"];
colRecordDate.AppearanceCell.ForeColor = Color.Red;
}
高亮显示活动编辑器
若要高亮显示当前活动的编辑器,请处理 ColumnView.ShownEditor事件并使用BaseView.ActiveEditor属性以访问编辑器。
条件格式
条件格式允许您根据单元格值自定义网格视图和带状网格视图中的单元格外观:
- 分析所有列单元格值并可视化数据分布。
- 突出显示特定的值和日期。
- 高亮显示具有最小或最大值的单元格。
- 突出显示低于或高于平均值的值。
- 突出显示唯一或重复的值。
- 使用自定义公式将颜色应用于特定单元格。
- 当单元格的值更改时,临时高亮显示这些单元格。
色标
数据网格比较单元格值,并使用从调色板中选择的纯色填充这些单元格。根据您的选择,调色板会逐渐切换到两种或三种阈值颜色。
数据栏
单元格部分填充选定的颜色。填充百分比取决于单元格值与该列中其他值的比较大小。也可以在零值处绘制垂直轴。在这种情况下,正值和负值的数据条以相反的方向显示,并使用不同的颜色绘制。
图标
图标集允许您用相应的图标标记每个值范围。
静态外观设置
选定的字体设置以及背景和前景色将应用于其值符合特定条件的单元格(例如,列的前10个值)。
使用图标或颜色临时高亮显示单元格(当值发生更改时)。
- 如果GridOptionsMenu.ShowConditionalFormattingItem选项已启用,用户可以右键单击列标题以访问“条件格式”菜单,该菜单允许用户添加、修改和清除格式规则。
- “Manage Rules…” 菜单项允许用户创建自定义高亮显示规则。若要创建规则,用户必须选择“Use a formula to determine which cells to format”规则类型,输入自定义条件,然后单击“Format”以指定应应用于值与此条件匹配的单元格的外观设置。
- 许多格式规则允许您在单元值更改时应用动画效果。有关详细信息,请参阅以下属性描述:FormatConditionRuleBase.AllowAnimation。
- 要在设计时添加条件格式规则,请调用网格设计器,切换到外观->格式规则选项卡,然后单击“+”按钮。
- 要在代码中添加规则,请执行以下操作:
创建一个新的GridFormatRule对象并将其放置在 ColumnView.FormatRules集合。
创建从父 FormatConditionRuleBase类派生的类的对象。
将步骤2中创建的规则分配给对象的FormatRuleBase。规则属性(在步骤1中创建)。
更改规则属性以自定义截止值、可视化效果等。
- 若要启用或禁用此规则,请更改其布尔GridFormatRule。已启用属性。
动态更改单元格和行外观
选中是否不同颜色
- 处理GridView.RowCellStyle事件以动态更改单元格外观。例如,您可以高亮显示特定的单元格以响应某些事件。下面的代码根据“标记”列的布尔值更改“名称”列单元格的背景色和内容对齐方式。
gridView.RowCellStyle += (sender, e) => {
GridView view = sender as GridView;
bool _mark = (bool)view.GetRowCellValue(e.RowHandle, "Mark");
if(e.Column.FieldName == "Name") {
e.Appearance.BackColor = _mark ? Color.LightGreen : Color.LightSalmon;
e.Appearance.TextOptions.HAlignment = _mark ? HorzAlignment.Far : HorzAlignment.Near;
}
};
- 您也可以处理GridView.RowStyle事件,用于单独处理和绘制行以及对行进行分组。例如,下面的代码片段突出显示了关注的行。
Color foreColor = Color.Brown;
Color backColor = Color.LightGreen;
// Change the appearance settings of row cells dynamically.
gridView.RowStyle += (sender, e) => {
GridView view = sender as GridView;
//Change the foreground and background colors of selected rows.
if(view.IsRowSelected(e.RowHandle)) {
e.Appearance.ForeColor = foreColor;
e.Appearance.BackColor = backColor;
/* This property controls whether settings of the RowStyle event have a higher priority
than the appearances specified by the GridViewAppearances.EvenRow
and GridViewAppearances.OddRow properties. */
e.HighPriority = true;
}
};
绘制组行
- GridView.GroupLevelStyle事件允许您动态绘制组行,并为每个组级别应用唯一的外观设置。在以下示例中,不同的编组行级别具有不同的外观设置。
gridView.GroupLevelStyle += (s, e) => {
if(e.Level == 0) {
e.LevelAppearance.ForeColor = Color.WhiteSmoke;
e.LevelAppearance.BackColor = Color.Salmon;
} else {
e.LevelAppearance.ForeColor = Color.FromArgb(50, 50, 50);
e.LevelAppearance.BackColor = Color.LightSalmon;
}
};
覆盖选定单元格的自定义外观
单个单元格的外观设置的优先级低于Column.AppearanceCell 外观单元格设置。因此,如果允许用户选择具有自定义外观的单个单元格(OptionsSelection.MultiSelectMode=CellSelect),则所有单元格(选中和未选中)看起来都是一样的。若要调整此行为并高亮显示所选单元格,请处理GridView.RowCellStyle事件。
private void GridView1_RowCellStyle(object sender, RowCellStyleEventArgs e) {
GridView view = sender as GridView;
if(view.IsCellSelected(e.RowHandle, e.Column)) {
e.Appearance.BackColor = view.PaintAppearance.SelectedRow.BackColor;
e.Appearance.ForeColor = view.PaintAppearance.SelectedRow.ForeColor;
}
}
禁用聚焦行/单元格外观
若要防止重点行在GridView或其子代中高亮显示,请禁用GridOptionsSelection.EnableAppearanceFocusedRow选项。GridOptionsSelection.EnableAppearanceFocusedCell属性允许您禁用聚焦单元格的着色。
以下示例显示了如何在网格控件失去焦点时禁用聚焦单元格外观设置并保持聚焦行外观:
private void Form1_Load(object sender, EventArgs e) {
gridView1.OptionsSelection.EnableAppearanceHideSelection = false;
gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;
}
禁用所选行/单元格外观
可以使用以下技术显示选定的行和单元格,而不显示高亮效果:
将常规行外观指定给GridViewAppearances.SelectedRow属性:
private void Form1_Load(object sender, EventArgs e) {
gridControl1.ForceInitialize();
gridView1.Appearance.SelectedRow.Assign(gridView1.PaintAppearance.Row);
}
处理 GridView.RowStyle, GridView.RowCellStyle, or GridView.CustomDrawCell事件并修改所选行外观:
private void gridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e) {
GridView view = sender as GridView;
if (e.Appearance == view.PaintAppearance.SelectedRow)
e.Appearance.Assign(view.PaintAppearance.Row);
e.HighPriority = true;
}
根据条件禁用单元格
可以禁用满足特定条件的行中的单元格。禁用的单元格将根据皮肤设置变灰。用户无法编辑禁用的单元格。
自动换行列标题
使用HeaderPanel属性可以访问全局设置,这些设置指定所有列标题的外观和文本格式。要换行列标题文本,请执行以下操作:
- 设置HeaderPanel.TextOptions.WordWrap 属性设置为WordWrap.Wrap.
- 设置HeaderPanel.Options.UseTextOptions 属性设置为true。
- 启用ColumnHeaderAutoHeight选项以自动调整列标题,或使用ColumnPanelRowHeight属性手动指定列标题的高度。
若要覆盖单个列的全局外观设置,请使用该列的AppearanceHeader属性。
以下示例演示如何包装“名称”列的标题文本。播放下面的动画以查看结果。
using DevExpress.Utils;
gridView1.Columns["Name"].AppearanceCell.TextOptions.WordWrap = WordWrap.Wrap;
gridView1.Columns["Name"].AppearanceCell.Options.UseTextOptions = true;
gridView1.OptionsView.ColumnHeaderAutoHeight = DefaultBoolean.True;
备忘单和故障排除
Appearances and Skins - DevExpress WinForms Cheat Sheet
Troubleshooting - Skins and Skin Editor