この記事は2019年05月01日に投稿しました。
目次

エッセンシャルWPF:Windows Presentation Foundation (Programmer's SELECTION)
- 作者: Chris Anderson,星睦
- 出版社/メーカー: 翔泳社
- 発売日: 2007/10/31
- メディア: 大型本
- 購入: 6人 クリック: 128回
- この商品を含むブログ (32件) を見る
1. はじめに
こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているWPFのDataGridでセルを動的に追加する方法についてです。
2. WPFのDataGridでセルを動的に追加する
WPFのDataGridでセルを動的に追加するには以下のように行います。
実装例
MainWindow.xaml
<Window x:Class="WPFAddCellDynamically.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WPFAddCellDynamically" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <DataGrid Name="dataGrid1" AutoGenerateColumns="False" DataContext="{Binding}" ItemsSource="{Binding}" /> </Grid> </Window>
MainWindow.xaml.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; 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; // DataTableを使用するために追加します。 namespace Sample { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { //! "No"カラム名 private static readonly string ColumnNo = "No"; //! "Name"カラム名 private static readonly string ColumnName = "Name"; /** * @brief コンストラクタ */ public MainWindow() { InitializeComponent(); // 初期化処理を行います。 Init(); } /** * @brief 初期化処理 */ private void Init() { // データグリッドの初期化処理を行います。 InitDataGrid(); // データテーブルの生成処理を行います。 var dataTable = CreateDataTable(); // データグリッドにデータテーブルを設定します。 dataGrid1.DataContext = dataTable; } /** * @brief データグリッドの初期化を行います。 */ private void InitDataGrid() { // カラムを追加します。 dataGrid1.Columns.Add(CreateDataGridTextColumn("番号", ColumnNo)); dataGrid1.Columns.Add(CreateDataGridTextColumn("名前", ColumnName)); } /** * @brief データグリッドテキストカラムを生成します。 * * @param [in] header ヘッダーに表示する見出し * @param [in] path バインドするパス名 * @return データグリッドテキストカラム */ private DataGridTextColumn CreateDataGridTextColumn(string header, string path) { var dataGridTextColumn = new DataGridTextColumn() { Header = header, IsReadOnly = false, FontSize = 12, Binding = new Binding(path) }; return dataGridTextColumn; } /** * @brief データテーブルを生成します。 */ private DataTable CreateDataTable() { var dataTable = new DataTable("dataTable1"); dataTable.Columns.Add(CreateDataColumn<int>(ColumnNo)); dataTable.Columns.Add(CreateDataColumn<string>(ColumnName)); // サンプルデータを追加します。 for (int i = 0; i < 10; ++i) { var row = dataTable.NewRow(); var no = i + 1; row[ColumnNo] = no; row[ColumnName] = "名前" + no.ToString(); dataTable.Rows.Add(row); } return dataTable; } /** * @brief データカラムを生成します。 * * @param [in] name カラム名 * @return データカラム */ private DataColumn CreateDataColumn<T>(string name) { var dataColumn = new DataColumn(name, typeof(T)); return dataColumn; } } }
3. おわりに
今回の要件から、DataGridのセルは動的に追加しないといけない気がしたため、先行して実装方法を調査しました。

実戦で役立つ C#プログラミングのイディオム/定石&パターン
- 作者: 出井秀行
- 出版社/メーカー: 技術評論社
- 発売日: 2017/02/18
- メディア: 大型本
- この商品を含むブログ (1件) を見る
紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。
私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。
また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688