下面的示例演示了如何使用自定义格式提供程序,把 XtraGrid 列中的 Boolean 值替换为特定的字符串。 请参阅 自定义格式设置 主题获得关于创建自定义格式提供程序的总说明。 注意,也可以通过网格的事件 (ColumnView.CustomColumnDisplayText) 为 Boolean 值设置自定义格式。

在本例中创建了一个自定义格式提供程序类。 它包含两个内部字段,用于指定与 truefalse 取值对应的字符串。 在自定义格式提供程序的构造函数中初始化这两个字段。 此类的 Format 方法检查当前待设置格式的取值,并返回一个适当的字符串。 请参阅下面的代码。

C#CopyCode image复制代码
class BooleanFormatter : IFormatProvider, ICustomFormatter {
   string trueString, falseString;
   public BooleanFormatter(string trueString, string falseString) {
      this.trueString = trueString;
      this.falseString = falseString;
   }
   public object GetFormat(System.Type type) { 
      return this; 
   }
   public string Format(string formatString, object arg, IFormatProvider formatProvider) {
      bool formatValue = Convert.ToBoolean(arg);
      if (formatValue)
         return trueString;
      else 
         return falseString;
   }
}
Visual BasicCopyCode image复制代码
Class BooleanFormatter
    Implements IFormatProvider, ICustomFormatter
    Dim trueString, falseString As String

    Public Sub New(ByVal trueString As String, ByVal falseString As String)
        Me.trueString = trueString
        Me.falseString = falseString
    End Sub

    Public Function GetFormat(ByVal type As System.Type) As Object _
    Implements IFormatProvider.GetFormat
        Return Me
    End Function

    Public Function Format(ByVal formatString As String, ByVal arg As Object, _
    ByVal formatProvider As IFormatProvider) As String Implements ICustomFormatter.Format
        Dim formatValue As Boolean = Convert.ToBoolean(arg)
        If (formatValue) Then
            Return trueString
        Else
            Return falseString
        End If
    End Function
End Class

考虑在下面插图中显示的列。 它被绑定到一个 Boolean 字段,此字段的取值指定汽车是否有自动驾驶功能。

通过把 truefalse 值分别替换为“Automatic” 和 “Manual”字符串,该列就可以提供更明确的信息。 下面的代码展示了如何把 BooleanFormatter 指派到该列。

该列的内置编辑器必须是文本编辑器,否则不能为取值设置格式。 要把文本编辑器用作内置编辑,则把一个 RepositoryItemTextEdit 对象指派到该列的 GridColumn.ColumnEdit 属性。

C#CopyCode image复制代码
using DevExpress.Utils;
// ...
colTransmission.ColumnEdit = colTransmission.View.GridControl.RepositoryItems.Add("TextEdit");
colTransmission.Caption = "Transmission Kind";
colTransmission.DisplayFormat.FormatType = FormatType.Custom;
colTransmission.DisplayFormat.Format = new BooleanFormatter("Automatic", "Manual");
Visual BasicCopyCode image复制代码
Imports DevExpress.Utils
' ...
colTransmission.ColumnEdit = colTransmission.View.GridControl.RepositoryItems.Add("TextEdit")
colTransmission.Caption = "Transmission Kind"
colTransmission.DisplayFormat.FormatType = FormatType.Custom
colTransmission.DisplayFormat.Format = new BooleanFormatter("Automatic", "Manual")

下面的插图显示了运行结果。