CodePlexにWPFのDataGridコントロールが追加されたとのタレコミ?がBlogのコメントにあった(感謝)
今広島への新幹線内でこの記事を書いているので、ダウンロードのURL等を示すことはできないけど、CodePlexでぐぐって、CodePlex内でWPFあたりで検索すると、WPF関連のページが見つかる。
そこから、WPF Toolkitというのがダウンロードできる。その中にDataGridコントロールが入っている。素敵だ。
早速お試ししてみる。まず、ダウンロードしてきたzipを解凍して、中にあるWPFToolkit.dllをWPFアプリケーションのプロジェクトに参照設定する。
DataGridを使いたいXAMLの適当な場所に名前空間の定義を追加する。
xmlns:WPFToolkit="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
ここでは、Windowタグの部分に記述した。
これで下準備は完了!おもむろにDataGridをWindowに配置する。この時点で実行しても、当然何も表示されない。
ここにデータを表示してみようと思う。表示するデータは、いつもの通りNameとAgeを持つPersonクラスを使ってみる。ということで、いつものコードをさくっと書いた。手が覚えてきたのでかなりのスピードで書けるようになったぜ。
namespace WpfDataTableSample
{
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
}
このPersonクラスのリストをDataContextに突っ込んでおく。
namespace WpfDataTableSample
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
DataContext = Enumerable.Range(10, 50).Select(i =>
new Person { Name = "田中 太郎 no" + i, Age = i % 50 }).ToList();
}
}
}
そして、DataGridのItemsSourceにバインドする。
<Window x:Class="WpfDataTableSample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WPFToolkit="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
Title="Window1" Height="300" Width="300">
<Grid>
<WPFToolkit:DataGrid ItemsSource="{Binding}">
</WPFToolkit:DataGrid>
</Grid>
</Window>
この状態で実行すると…
プロパティ単位で列が作られて、一応編集まで出来ちゃう。なんてこった。罫線も表示されてるし、矢印キーでの上下左右の移動、F2キーで選択中のセルの編集開始といった操作も出来る。いい感じだ。
ただ、日本語で列のヘッダくらいは表示したいってのが人情だと思う。このエントリでは、そこまで書いて終わろうと思う。
今は、自動的に列を定義してくれる機能を使ってるので、プロパティ名がそのまま表示されている。列の定義をきちんとしてあげることで、列のヘッダとかを好きにすることが出来る。
<!-- 自動でカラムを生成しないように指定 -->
<WPFToolkit:DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False">
<WPFToolkit:DataGrid.Columns>
<!-- 名前の表示 -->
<WPFToolkit:DataGridTextColumn DataFieldBinding="{Binding Name}"
Header="なまえ" />
<!-- 年齢の表示 StringFormatでフォーマットも指定してみた -->
<WPFToolkit:DataGridTextColumn DataFieldBinding="{Binding Age, StringFormat=000歳}"
Header="ねんれい" />
</WPFToolkit:DataGrid.Columns>
</WPFToolkit:DataGrid>
DataGridのColumnsプロパティが列の定義をするプロパティになる。ここに、必要なだけカラムを定義する。
ざっと見た感じだとCheckBoxやComboBoxみたいなものを表示するカラムもあったりした。ここでは、一番単純そうなDataGridTextColumnを使ってみた。
DataFieldBindingにBindingを渡して、Headerプロパティにヘッダーに表示した内容を書くだけと直感的に使えるようになっている。現に今、このエントリを書きながら一度もマニュアル類を読んでない。にも関わらず、ここらへんまではすんなり進むことができた。
いい感じだ。
さて、実行すると下のように表示される。ヘッダーも日本語になったし、年齢がフォーマッティングされて出力されているのがわかる。
今回はここまで。