プロプログラマ -Flex,Air,C#,Oracle,PHP-

プログラマーを職業としてます。 Flex,Air,C#,Oracle,PHPの言語ノウハウを中心に情報発信していきます

[WPF] DataGridのヘッダカラムに指定した”_”が表示されない

WPFのDataGridで、Oracleから取得した値をバインドさせてみました。
カラムは、AutoGenerateプロパティをtrueにして自動生成させています。
下記の例は、dba_tablesの値です。

Image

ヘッダー部を見てみると、本来のテーブル定義にあるはずのアンダーバーが省略されてます。
例えば、TABLENAMEは本当はTABLE_NAMEです。
全部ではなくて、例えばCELL_FLASH_CACHEというカラムは、CELLFLASH_CACHEと表示されてます。微妙な省略ぶりです。

念のためバインドしているDataTableをデバッグで見てみましたが、アンダーバーは正しく入っています。

いろいろ調べたところ、”_”はアクセスキーとして判断されるため、表示がなくなるようです。
アクセスキーのわりにその表現が特にされていないのは何ででしょうね。

というわけで、これを回避するにはアンダーバーを2つつなげればいいらしいです。
“_”⇒”__”

元のDataSetを触ってもいいですが、本来はアンダーバーは1つだけなので、あまり編集したくありません。
なので、DataGrid側のカラム定義を修正します。
今はカラムを自動生成しているため、DataGridのAugoGeneratingColumnイベントで文字列の置換えをすることにします。

private void datagrid1_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    e.Column.Header = ((string)e.Column.Header).Replace("_", "__");
}

手動生成している場合は、セットするときに置き換えればOKです。

本当は、WPFのもっときれいな書き方ができると思いますが、そのあたりがまだ分かっていませんので、Windows Formのような実装にしてます。

修正後はこの通り、
Image

ちゃんとアンダーバーが表示されています。

Oracleではカラム名にアンダーバーを使用することが多いので、表示されないのは本当に困ります。
あまり使っていない場合、省略されていることに気付かない可能性があります。
Oracleに限らず、カラム名にアンダーバーを使用する場合は、注意しましょう。

 

== ランキングに参加しています。ぜひクリックお願いします ==

プログラム ブログランキングへ
にほんブログ村 IT技術ブログへ
にほんブログ村

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です