CodeZine(コードジン)

特集ページ一覧

SQL Serverのデータをグリッド表示するWPFアプリケーションの作成【増補改訂版】

ComponentOne Studioを活用したWindowsフォームアプリケーションの作成

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2015/02/27 14:00
目次

その他のテクニック

日付の表示・編集を和暦で行う

 日付を和暦で表示する場合は.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プロパティに設定します。

Visual Basic
Dim view = New PagedCollectionView(list)
view.Culture = CultureInfo.CurrentCulture
c1DataGrid1.ItemsSource = view
C#
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>

 そして、ビハインドコードにイベントハンドラを作成し処理を記述します。

Visual Basic
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
C#
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独特のデザイン性の高さと組み合わせれば、視覚性の高いグリッドアプリケーションが作れるのではないでしょうか。



  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 瀬戸 遥(セト ハルカ)

    8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

バックナンバー

連載:ComponentZine(ComponentOne Studio)

もっと読む

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5