自定义预览文本
XtraGrid 提供了预览功能,允许每个行显示一个预览区。 预览区适合于显示每条记录的备注字段或自定义数据。 预览概述 文档提供了关于预览区的基础信息。
本主题详细描述如何在运行时刻定制预览区。
最初,显示在预览区中的文本是从数据库字段中提取的,但是通过接管 GridView.CalcPreviewText 事件,也可以定制文本。 使用此事件的 CalcPreviewTextEventArgs.PreviewText 参数来指定预览文本。 下列代码在预览区中显示了名称和地址。 ColumnView.GetRowCellValue 方法被用于获取当前单元格的数据,并把它插入到预览区中:
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid.Views.Grid; // ... private void gridView1_CalcPreviewText(object sender, DevExpress.XtraGrid.Views.Grid.CalcPrev GridView View = sender as GridView; String str = "Name: " + View.GetRowCellValue(e.RowHandle,colContactName).ToString(); str += "\r\n Address: " + View.GetRowCellValue(e.RowHandle,colAddress).ToString(); e.PreviewText = str; } |
Visual Basic | 复制代码 |
---|---|
Using DevExpress.XtraGrid.Views.Grid ' ... Private Sub GridView1_CalcPreviewText(ByVal sender As Object, _ ByVal e As DevExpress.XtraGrid.Views.Grid.CalcPreviewTextEventArgs) _ Handles GridView1_CalcPreviewText Dim View As GridView = sender Dim Str As String = "Name: " + View.GetRowCellValue(e.RowHandle,colContactName).ToString() + _ vbNewLine + "Address: " + View.GetRowCellValue(e.RowHandle,colAddress).ToString() e.PreviewText = str End Sub |
自定义绘制预览区
也可以通过接管 GridView.CustomDrawRowPreview 事件来自定义绘制预览区。 当使用此事件时,可以额外定制预览区 (在任何位置绘制图像和文本)。 但是要注意,自定义绘制的结果不能被打印或导出。
示例
本示例展示了如何定制视图的 预览区,这是通过 GridView.CustomDrawRowPreview 事件实现的。 在本示例中,在文本左侧绘制一个来源于“Photo”列的图像。 FromByteArray 静态方法允许把从单元格返回的字节数组转换为 Image 对象。
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid.Views.Base; private void gridView1_CustomDrawRowPreview(object sender, RowObjectCustomDrawEventArgs e) { int dx = 5; // A rectangle for displaying text. Rectangle r = e.Bounds; r.X += e.Bounds.Height + dx * 2; r.Width -= (e.Bounds.Height + dx * 3); // Draw an image from the "Photo" column. e.Graphics.DrawImage(DevExpress.XtraEditors.Controls.ByteImageConverter.FromByteArray( (byte[])gridView1.GetDataRow(e.RowHandle)["Photo"]), e.Bounds.X + dx, e.Bounds.Y, e.Bounds.Height, e.Bounds.Height); // Draw the text. e.Appearance.DrawString(e.Cache, gridView1.GetRowPreviewDisplayText(e.RowHandle), r); // No default painting is required e.Handled = true; } |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraGrid.Views.Base Private Sub gridView1_CustomDrawRowPreview(ByVal sender As Object, _ ByVal e As RowObjectCustomDrawEventArgs) Handles gridView1.CustomDrawRowPreview Dim dx As Integer = 5 'A rectangle for displaying text Dim r As Rectangle = e.Bounds r.X += e.Bounds.Height + dx * 2 r.Width -= e.Bounds.Height + dx * 3 'Draw an image from the "Photo" column e.Graphics.DrawImage(DevExpress.XtraEditors.Controls.ByteImageConverter.FromByteArray( _ CType(gridView1.GetDataRow(e.RowHandle)("Photo"), Byte())), e.Bounds.X + dx, _ e.Bounds.Y, e.Bounds.Height, e.Bounds.Height) 'Draw the text e.Appearance.DrawString(e.Cache, gridView1.GetRowPreviewDisplayText(e.RowHandle), r) 'No default painting is required e.Handled = True End Sub |