UltraGrid では DataFilter 機能を使用することにより、バインドされた元データを変更することなくセルの表示値を変更することができます。
IEditorDataFilter インターフェイスの Convert メソッドを実装します。
このメソッドを使用することにより、セルに表示する値とセルのエディタで扱う値の間で行うデータ変換の処理を拡張することができます。
ここでは、セルの値が DBNull の場合はセルに “未入力” が表示されるようにします。
public class MyNullValueConverter : IEditorDataFilter
{
object IEditorDataFilter.Convert(EditorDataFilterConvertArgs conversionArgs)
{
if ((conversionArgs.Context as UltraGridCell)?.Column.Key == "myCustomColumn")
{
if (conversionArgs.Direction == ConversionDirection.OwnerToEditor)
{
if (conversionArgs.Value == DBNull.Value)
{
conversionArgs.Handled = true;
conversionArgs.IsValid = true;
return "未入力";
}
}
else if (conversionArgs.Direction == ConversionDirection.EditorToOwner)
{
if (conversionArgs.Value.ToString() == "未入力")
{
conversionArgs.Handled = true;
conversionArgs.IsValid = true;
return DBNull.Value;
}
}
}
return conversionArgs.Value;
}
}
以上のように作成した MyNullValueConverter クラスのインスタンスを UltraGridの列のEditor.DataFilterプロパティに割り当てます。
ultraGrid1.DisplayLayout.Bands[0].Columns["myCustomColumn"].Editor.DataFilter = new MyNullValueConverter();
