その他のテクニック
日付の表示・編集を和暦で行う
日付を和暦で表示する場合は.NETのJapaneseCalendarクラスを使用します。DataGridで使用する場合は、日付を和暦に変換する値コンバーターを定義しておき、BindingオブジェクトのConverterプロパティに設定します。
また、非編集時だけでなく、編集時にも和暦を扱う場合は入力に使用するエディタコントロールが和暦をサポートする必要があるため、DataGridでTemplateColumnを使用し、編集時に使用するエディタをカスタマイズして和暦による編集を可能にする方法があります。
和暦を使う場合は、まず、日付を和暦に変換する値コンバーターをリソースで定義します。
<Window.Resources>
<local:JapaneseCalendarConverter x:Key="jpConverter" />
</Window.Resources>
次に、このリソースを和暦を使いたい列にバインドします。
<c1:C1DataGrid AutoGenerateColumns="False" Name="C1DataGrid1">
<c1:C1DataGrid.Columns>
<c1:DataGridDateTimeColumn Header="入社日付" Binding="{Binding i, Converter={StaticResource jpConverter}}" DateFormat="Long" />
<c1:DataGridTemplateColumn Header="入社日付(和暦入力)">
<c1:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding i, Converter={StaticResource jpConverter}}" HorizontalAlignment="Center" VerticalAlignment="Center" />
</DataTemplate>
(参考:[DataGrid for WPF]日付の表示・編集を和暦で行うには?)
漢字を正しい順序でソートする
C1DataGridや標準のDataGridのソート機能は、PagedCollectionViewクラスの仕様に依存し、WPFではソートや文字列比較の結果はカルチャに依存します。
PagedCollectionViewクラスでは、Cultureプロパティでソート処理に使用するCultureInfoを設定しますが、Cultureプロパティの既定値はnullであるため、日本語のソートが正常に行われない場合があります。
従って、漢字が正しい順序でソートされない場合は、次のようにPagedCollectionView.Cultureプロパティに日本語を設定して、データソースにPagedCollectionViewを設定することで、漢字などの日本語を正常な順序でソートすることができます。
日本語のWindowsの場合は、CultureInfoクラスのCurrentCulture プロパティが日本語として設定されていますので、このプロパティの値をPagedCollectionViewオブジェクトのCultureプロパティに設定します。
Dim view = New PagedCollectionView(list) view.Culture = CultureInfo.CurrentCulture c1DataGrid1.ItemsSource = view
var view = new PagedCollectionView(list); view.Culture = CultureInfo.CurrentCulture; c1DataGrid1.ItemsSource = view;
(参考:[DataGrid for WPF]漢字が正しい順序でソートされない)
チェックボックス列でチェック時のイベントを発生させる
チェックボックス型列において、チェックボックスのOn/Off切り替え時のイベントを取得するには、編集時のチェックボックスエディタのCheckedおよびUnchechedイベントを使用します。
<Style TargetType="CheckBox">
<Setter Property="Tag" Value="{Binding Name, Mode=OneWay}" />
<EventSetter Event="Checked" Handler="CheckBox_Checked" />
<EventSetter Event="Unchecked" Handler="CheckBox_Unchecked" />
</Style>
そして、ビハインドコードにイベントハンドラを作成し処理を記述します。
Private Sub CheckBox_Checked(sender As Object, e As Windows.RoutedEventArgs)
If TypeOf sender Is CheckBox Then
Me.textBlock1.Text = CType(sender, CheckBox).Tag + "のチェックがOnになりました"
End If
End Sub
Private Sub CheckBox_Unchecked(sender As Object, e As Windows.RoutedEventArgs)
If TypeOf sender Is CheckBox Then
Me.textBlock1.Text = CType(sender, CheckBox).Tag + "のチェックがOffになりました"
End If
End Sub
private void CheckBox_Checked(object sender, System.Windows.RoutedEventArgs e)
{
if (sender is CheckBox)
{
this.textBlock1.Text = ((CheckBox)sender).Tag + "のチェックがOnになりました";
}
}
private void CheckBox_Unchecked(object sender, System.Windows.RoutedEventArgs e)
{
if (sender is CheckBox)
{
this.textBlock1.Text = ((CheckBox)sender).Tag + "のチェックがOffになりました";
}
}
(参考:[DataGrid for WPF]チェックボックス列でチェック時のイベントを発生させる方法)
まとめ
C1DataGridコントロールは、このようにデータベース構成ウィザードの簡単な操作でデータベースとの連結が可能で、ソート、フィルタ処理、グループ化などの機能がすでに組み込まれていますので、コードを書かずにこれらの機能をすぐに使えることができます。
連結できるデータベースの種類も豊富なので、WPF独特のデザイン性の高さと組み合わせれば、視覚性の高いグリッドアプリケーションが作れるのではないでしょうか。
