最初:私たちは使用しますinfragistics xamdatagrid 11.1.20111.2053
私たちの問題:
一般的なリストでグリッドを使用します。そのため、非常に動的であり、あらゆる状況に備える必要があります。各フィールド タイプに対して、SortComparer、FilterComparer、エディター タイプ、Edita タイプ、およびスタイル エディターを設定します。モデルの一部のプロパティには、特別な TypeConverter を使用します。たとえば、セルでは、一部の値が表示できません。
0 = string.Empty
1 = 1
2 = 2
最初の解決策として、型コンバーターと特別なソート比較子のみを使用します。
public class HideZeroIntEntryConverter : Int32Converter
{
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
if (value is int) {
if (destinationType == typeof(string)) {
return ((int)value != 0) ? value.ToString() : string.Empty;
}
return ((int)value != 0) ? value : Binding.DoNothing; // this is the best solution to tell the grid the cell is empty
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
これは、フィルタリングしない場合は完璧に機能しますが、値をフィルタリングしたい場合は、フィルター ドロップダウン項目に醜い「Binding.DoNothing」が表示されます (並べ替えとフィルタリングも間違っています)。また、コンバーターがstring.emptyと言うため、「0」をフィルタリングすることはできません...
2 番目のソリューションでは、特別な XamTextEditor を使用します。
public class HideZeroIntEntryTextEditor : XamTextEditor
{
public HideZeroIntEntryTextEditor() {
this.ValueToDisplayTextConverter = new HideZeroIntEntryValueConverter();
}
}
public class HideZeroIntEntryValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
if (value is int) {
if (targetType == typeof(string)) {
return ((int)value != 0) ? value.ToString() : string.Empty;
}
// this never happens
return ((int)value != 0) ? value : Binding.DoNothing;
}
// this never happens
return targetType == typeof(string) && value != null ? value.ToString() : value;
}
}
およびフィールド設定用
field.Settings.EditAsType = typeof(int);
field.Converter = null;
field.Settings.EditorType = typeof(HideZeroIntEntryTextEditor);
field.Settings.SortComparer = GenericComparer<int>.Instance;
field.Settings.FilterComparer = GenericComparer<int>.Instance;
field.Settings.GroupByComparer = GroupByRecordComparer<int>.Instance;
これで、リストに表示されない場合でも、「0」にフィルターできます。
ただし、どちらの場合も、実際には存在しないため、空のエントリでフィルタリングすることはできません! でもしたい!私たちの意見では、これは、独自の特別なフィルターを作成できれば可能性があります. しかし、残念ながらこれはそれほど簡単ではありません。はい、特別なフィルター ブランクと NonBlanks を削除できますが、これはすべてのグリッドに適用されます。オーバーライドする特別なフィルターは非常に複雑で、修正することさえできません。
OK、空のセルを表示して、このセルをフィルター処理したいのですが、特別なフィルターが正しく機能しません!
何ができるか、何かアイデアはありますか?
これがインフラジスティックスの質問です