C#のWPFを使用したDataGridのセルを動的に追加する方法


DataGridを使った表で
動的にセルを追加する方法をメモ。

**XAMLファイル**

```TEST.XAML
<Window x:Class="WPFDataGRidTest.MainWindow"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	Title="MainWindow"
	Width="525"
	Height="350">
	<Window.Resources>
	<Style x:Key="NumericStyle" TargetType="TextBlock">
	<Setter Property="TextAlignment" Value="Right" />
	</Style>
	</Window.Resources>
	<Grid>
	<DataGrid Name="DataGridWindow" AutoGenerateColumns="False" DataContext="{Binding}" ItemsSource="{Binding}" />
	</Grid>
</Window>
```

**C#ソース**

``` Main.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;

namespace WPFDataGRidTest
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
            // データテーブル
            private DataTable m_dt;

            // コンストラクタ
            public MainWindow()
            {
                    InitializeComponent();

                    // テーブルの初期化
                    try
                    {
                        InitTables();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, Title, MessageBoxButton.OK, MessageBoxImage.Error);
                        return;
                    }
                }

                // メンバ関数
                /// <summary>
                /// テーブルの初期化
                /// </summary>
                private void InitTables()
                {
                        // 水平スクロールバー
                        DataGridWindow.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
                        // 垂直スクロールバー
                        DataGridWindow.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;

                        DataGridWindow.Columns.Add(new DataGridTextColumn() { Header = "test_id", IsReadOnly = false, FontSize = 12, Binding = new Binding( "test_id" ) });
                        DataGridWindow.Columns.Add(new DataGridTextColumn() { Header = "test_string", IsReadOnly = false, FontSize = 12, Binding = new Binding("test_string") });

                        m_dt = new DataTable("DataGridTest");

                        m_dt.Columns.Add(new DataColumn("test_id"      , typeof(int)     ));// 数値
                        m_dt.Columns.Add(new DataColumn("test_string"  , typeof(string)  ));// 文字列

                        // サンプルデータ追加
                        DataRow newRowItem;
                        for( int i = 0; i < 100; i++ )
                        {
                            newRowItem = m_dt.NewRow();
                            newRowItem["test_string"] = "test" + i.ToString();
                            newRowItem["test_id"] = i.ToString();
                            m_dt.Rows.Add(newRowItem);
                        }

                        // グリッドにバインド
                        DataGridWindow.DataContext = m_dt;

                }
        }
}
```


***ポイント***
DataTableを使っていくのとBinding部分ですね。
通常はXAMLでBindingのIDを指定してくのですが、
プログラムのほうで追加して、それを指定してセルを作っていく、
という感じが良かったみたいです。