Cells 单元
Goto Data Grid 数据网格
Cells 单元
Content Alignment 内容对齐
显示数值的数据网格单元格会将其内容向右对齐。显示其他类型数据的单元格将其内容向左排列。若要更改单元格内容对齐方式,请处理 ColumnView.RowCellDefaultAlignment 事件。
Selection Modes 选择模式
使用默认 Grid 设置,用户只能选择整行。将 GridOptionsSelection.MultiSelectMode 属性设置为 GridMultiSelectMode.CellSelect 值,以允许用户选择单个单元格。在此模式下,用户可以使用“Ctrl”和“Shift”键一次选择多个单元格。
- GridView.SelectCell、GridView.SelectCells — 允许您选择单个单元格和/或单元格区域的方法。
- GridView.GetSelectedCells — 返回所选单元格或这些单元格的父 Grid 列。
Display Text and Cell Value 显示文本和单元格值
单元格值是存储在数据源中的值。单元格的显示文本是向用户显示的值。当数据网格对数据进行排序或筛选时,它会处理单元格值(而不是显示文本)。您可以改为按单元格显示值对控件进行排序和筛选数据。为此,请使用 GridColumn.SortMode 和 GridColumn.FilterMode 属性。
某些 Grid 功能(例如,格式化)会改变向最终用户显示实际单元格值的方式。若要在不更改基础值的情况下手动修改单元格的显示文本,请处理 ColumnView.CustomColumnDisplayText 事件。在以下示例中,如果属于 “Length” 列的单元格的值大于 20,则不显示任何内容。
gridView.CustomColumnDisplayText += (sender, e) => {if(e.Column.FieldName == "Length") {double val = (double)e.Value;if (val > 20)e.DisplayText = string.Empty;}};
How to Place an Image in a Grid Cell 如何在网格单元格中放置图像
根据您的任务,您可以使用不同的技术在 Data Grid 单元格中显示图像(字形、图标、图片)。请注意,您不能使用 GridColumn.CellAppearance.Image 属性(数据网格忽略此设置)。
Editor Context Images 编辑器上下文图像
RepositoryItemTextEdit.ContextImageOptions 组允许您将光栅或矢量图标分配给 RepositoryItemTextEdit 对象。如果需要为所有列单元格显示相同的图标,并保持单元格文本可编辑,请使用此方法。
private void gridView1_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
{string fileName = FileUtil.getFileName("Cell");string filePath = DevExpress.Utils.FilesHelper.FindingFileName(Application.StartupPath, "\\img\\" + fileName, false);RepositoryItemTextEdit textEdit = new RepositoryItemTextEdit();textEdit.ContextImageOptions.Image = Image.FromFile(filePath); //Properties.Resources.Cell;if (e.Column.FieldName == "cash_opera" && e.CellValue.ToString() == "00828"){e.RepositoryItem = textEdit;}
}
Check Edit with Images 选中 Edit with Images
如果需要将布尔单元格值替换为图标,请为此列分配 Check Edit 编辑器。编辑器的 ImageOptions 属性允许您为“Checked”和“Unchecked”编辑器状态设置图标。您还需要将编辑器的 CheckBoxOptions.Style 属性设置为 “custom”。
view.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
view.OptionsSelection.MultiSelect = true;
view.OptionsSelection.CheckBoxSelectorColumnWidth = 45;
view.OptionsSelection.ShowCheckBoxSelectorInColumnHeader = DevExpress.Utils.DefaultBoolean.False;RepositoryItemCheckEdit checkEdit = gridControl1.RepositoryItems.Add("CheckEdit") as RepositoryItemCheckEdit;
checkEdit.ImageOptions.ImageChecked = Image.FromFile(FileUtil.getFilePath("勾选"));
checkEdit.ImageOptions.ImageUnchecked = Image.FromFile(FileUtil.getFilePath("取消"));
checkEdit.CheckBoxOptions.Style = DevExpress.XtraEditors.Controls.CheckBoxStyle.Custom;
gridView1.Columns["IsRead"].ColumnEdit = checkEdit;
gridControl1.RepositoryItems.Add(checkEdit);
Image Combo Box 图像组合框
如果单元格显示要替换为图像的枚举值,请使用链接到 ImageList 或 DevExpress 图像集合的 ImageComboBoxEdit 编辑器。
/** 添加未绑定列*/
GridColumn unboundColumn3 = gridView1.Columns.AddField("Severity");
unboundColumn3.UnboundDataType = typeof(System.Object);
unboundColumn3.Visible = true;
RepositoryItemImageComboBox imageCombo = gridControl1.RepositoryItems.Add("ImageComboBoxEdit") as RepositoryItemImageComboBox;
DevExpress.Utils.ImageCollection images = new DevExpress.Utils.ImageCollection();
images.AddImage(Image.FromFile(FileUtil.getFilePath("Minor.png")));
images.AddImage(Image.FromFile(FileUtil.getFilePath("Moderate.png")));
images.AddImage(Image.FromFile(FileUtil.getFilePath("Severe.png")));
imageCombo.SmallImages = images;
imageCombo.Items.Add(new ImageComboBoxItem("Minor", (short)1, 0));
imageCombo.Items.Add(new ImageComboBoxItem("Moderate", (short)2, 1));
imageCombo.Items.Add(new ImageComboBoxItem("Severe", (short)3, 2));
imageCombo.GlyphAlignment = DevExpress.Utils.HorzAlignment.Center;
gridView1.Columns["Severity"].ColumnEdit = imageCombo;
gridControl1.RepositoryItems.Add(imageCombo);
Conditional Formatting 条件格式
当您设置了静态图标来可视化不同的值或值范围时,建议使用此方法。在这种情况下,图标显示在单元格值旁边。
外观和条件格式
Fill Cells with Images 用图像填充单元格
使用 PictureEdit 编辑器用图像填充整个 Grid 单元格。
/** 添加未绑定列 用图像填充单元格*/
GridColumn unboundColumn4 = gridView1.Columns.AddField("Picture");
unboundColumn4.UnboundDataType = typeof(System.Object);
unboundColumn4.Visible = true;
unboundColumn4.Caption = "图像填充单元格";
RepositoryItemPictureEdit pictureEdit = gridControl1.RepositoryItems.Add("PictureEdit") as RepositoryItemPictureEdit;
pictureEdit.SizeMode = PictureSizeMode.Zoom;
pictureEdit.NullText = " ";
gridView1.Columns["Picture"].ColumnEdit = pictureEdit;
gridControl1.RepositoryItems.Add(pictureEdit);private void gridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
{if ((e.Column.FieldName == "Picture") && e.IsGetData){Image image = null;var cash_opera = (string)((DataRowView)e.Row)["cash_opera"];if (cash_opera.Equals("01828")){image = Image.FromFile(FileUtil.getFilePath("Cell.bmp"));}else{image = Properties.Resources.Cell;}e.Value = image;}
}
HTML Formatting HTML 格式
使用 Image 标签将图像嵌入到单元格中。请注意,此方法使单元格不可编辑。
GridColumn unbound = new GridColumn();
unbound.UnboundDataType = typeof(string);
unbound.FieldName = "Html";
unbound.Visible = true;
unbound.Caption = "HTML";
gridView1.Columns.Add(unbound);ImageCollection imageCollection1 = new ImageCollection();RepositoryItemHypertextLabel htLabel = new RepositoryItemHypertextLabel();
htLabel.HtmlImages = imageCollection1;
gridControl1.RepositoryItems.Add(htLabel);
unbound.ColumnEdit = htLabel;private void gridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
{if (e.Column.FieldName == "Html"){e.Value = "<a href='https://www.google.com'>Google</a>";}
}
Cell Merging Cell 合并
在 GridView 和 BandedGridView 视图中,具有相同值的单元格可以自动合并。请注意,合并依赖于单元格值,而不是单元格显示文本。
合并的单元格存在以下限制:
- 最终用户无法编辑合并的单元格。
- 行多选处于禁用状态。
- 合并的行无法显示预览部分。如果 GridOptionsView.ShowPreview 选项设置为 true,则无论 GridOptionsView.AllowCellMerge 属性的值如何,都无法合并具有相同值的相邻单元格。
- 忽略聚焦行和单元格的外观设置(GridViewAppearances.FocusedRow 和 GridViewAppearances.FocusedCell 属性)。
- 用于绘制偶数行和奇数行的外观设置将被忽略(GridViewAppearances.EvenRow 和 GridViewAppearances.OddRow 属性)。
Related API 相关 API
- GridOptionsView.AllowCellMerge — 为整个视图启用自动单元格合并。
- OptionsColumn.AllowMerge — 仅对此列启用自动单元格合并。此属性优先于全局 GridOptionsView.AllowCellMerge 设置。
- GridView.CellMerge — 此事件允许您实施自定义算法并手动合并单元格。
// Trim e-mail addresses
private void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) {if (e.Column == colCreatorID) {string email = e.DisplayText;string domain = email.Substring(email.IndexOf('@') + 1);e.DisplayText = domain;}
}// Custom cell merge
private void gridView1_CellMerge(object sender, DevExpress.XtraGrid.Views.Grid.CellMergeEventArgs e) {GridView view = sender as GridView;if(view == null) return;if (e.Column == colCreatorID) {string text1 = view.GetRowCellDisplayText(e.RowHandle1, colCreatorID);string text2 = view.GetRowCellDisplayText(e.RowHandle2, colCreatorID);e.Merge = (text1 == text2);e.Handled = true;}
}
Access Grid Cells in Code 在代码中访问网格单元格
-
ColumnView.GetRowCellDisplayText 和 ColumnView.GetRowCellValue
返回单元格值并显示任何网格单元格的文本。 -
ColumnView.GetFocusedRowCellDisplayText 和 ColumnView.GetFocusedRowCellValue
返回单元格值并显示属于当前焦点行的任何单元格的文本。 -
ColumnView.FocusedRowHandle 和 ColumnView.FocusedColumn
设置聚焦的行和列以选择所需的单元格。 -
ColumnView.CellValueChanging 和 ColumnView.CellValueChanged
这些事件在响应最终用户对单元格值的修改时触发。