[WPF] DataGridのヘッダカラムに指定した”_”が表示されない
WPFのDataGridで、Oracleから取得した値をバインドさせてみました。
カラムは、AutoGenerateプロパティをtrueにして自動生成させています。
下記の例は、dba_tablesの値です。
ヘッダー部を見てみると、本来のテーブル定義にあるはずのアンダーバーが省略されてます。
例えば、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のような実装にしてます。
ちゃんとアンダーバーが表示されています。
Oracleではカラム名にアンダーバーを使用することが多いので、表示されないのは本当に困ります。
あまり使っていない場合、省略されていることに気付かない可能性があります。
Oracleに限らず、カラム名にアンダーバーを使用する場合は、注意しましょう。
== ランキングに参加しています。ぜひクリックお願いします ==
性別としての男と女を英語で書くとき Oracle SQL DeveloperのJVM設定はどのファイル?