LoginSignup
25
26

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-08-03

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

25
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
26