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を指定してくのですが、
プログラムのほうで追加して、それを指定してセルを作っていく、
という感じが良かったみたいです。