MultiRowのテンプレートデザイン機能を .NETプロジェクトで使う

2026年3月4日にリリースされた「MultiRowPlus for Windows Forms(マルチロウ)」の最新バージョン「13.0J」に含まれるMultiRowコントロールでは、.NETのWindows Formsプロジェクトにおいてテンプレートウィザードやテンプレートデザイナを使用できるようになりました。

テンプレートデザイナ

そこで本記事では、.NET 10のWindows FormsプロジェクトにおいてMultiRowのテンプレートデザイン機能を利用する方法について解説します。

事前準備

MultiRowのテンプレートデザイン機能は、.NET 8と .NET 10に対応していますが、今回はVisual Studio 2026 + .NET 10の環境を前提として解説します。

.NETプロジェクトの作成

Visual Studio 2026 を起動します。スタート画面で「新しいプロジェクトの作成」を選択します。

.NETプロジェクトの作成

[新しいプロジェクトの作成]画面で「Windows フォーム アプリ」を選択します。

.NETプロジェクトの作成

プロジェクト名およびソリューション名を指定し、[次へ]ボタンをクリックします。

.NETプロジェクトの作成

フレームワークとして「.NET 10.0 (長期的なサポート)」を指定し、[作成]ボタンをクリックします。

.NETプロジェクトの作成

ソリューションとプロジェクトが作成され、生成されたソリューションの内容がソリューションエクスプローラーに表示されます。

.NETプロジェクトの作成

NuGetパッケージのインストール

ソリューションエクスプローラーで、プロジェクトのコンテキストメニューから「NuGetパッケージの管理」を選択し、「NuGetパッケージマネージャー」を開きます。

NuGetパッケージのインストール

「参照」タブに切り替え、検索ボックスに「MESCIUS.Win.MultiRow」と入力すると、本製品のNuGetパッケージ「MESCIUS.Win.MultiRow」が表示されます。

NuGetパッケージのインストール

NuGetパッケージ「MESCIUS.Win.MultiRow」を選択して[インストール]ボタンをクリックします。

NuGetパッケージのインストール

「インストール済み」タブを開くとMultiRowのNuGetパッケージがインストールされているのを確認できます。

NuGetパッケージのインストール

NuGetパッケージをインストールした後に、Program.csのMainメソッドに以下のコードを追加します。これにより .NETプロジェクトでShift_JISエンコーディングが利用できるようになります。

System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
NuGetパッケージのインストール

MultiRowのテンプレートデザイン機能

MultiRowでは、設計時にテンプレートを作成する方法として以下の機能が用意されています。また、ヘルプで解説しているように実行時にコードでテンプレートを作成することも可能です。

  • テンプレートウィザード
  • テンプレートデザイナ

ここからは、設計時にテンプレートを作成する上記の2つの機能について説明します。

テンプレートウィザード

テンプレートウィザードでは、対話形式でテンプレートの雛形を作成できます。セル型などの細部の調整は、次の項目で説明するテンプレートデザイナを使って行います。

.NETプロジェクトのテンプレートウィザードでは、.NET Frameworkプロジェクトで有効な「データソースの定義からテンプレートを作成する」機能は使用できません。そのため、データ連結する場合は、各セルのDataFieldプロパティを手動で設定し、データソースの接続はコードで記述する必要があります。

テンプレートデザイナ

テンプレートデザイナでは、テンプレートウィザードで作成したテンプレートに対してセルの位置、サイズ、スタイル、そしてセル型などを変更することができます。また、最初からテンプレートデザイナを使って任意のレイアウトのテンプレートを作成することも可能です。

.NETプロジェクトでテンプレートデザイナを使用する場合には、制限事項があります。こちらの制限事項に該当する場合は、.NET Frameworkプロジェクトを併用する回避策をご検討ください。

テンプレートウィザードを使用する

テンプレートウィザードを使って雛型のテンプレートを作成する手順は次のとおりです。ソリューションエクスプローラーで、プロジェクトのコンテキストメニューから[追加]-[新しい項目]を選択します。

テンプレートウィザードを使ってみる

[新しい項目の追加]ダイアログで[C#の項目]-[Windows Forms]を選択します。リストから「MultiRow 13.0テンプレートウィザード」を選択して[追加]ボタンをクリックします。

テンプレートウィザードを使ってみる

「MultiRow 13.0テンプレートウィザード」ダイアログで指示に従って[次へ]ボタンをクリックします。

テンプレートウィザードを使ってみる

テンプレートの種類を選択します。

テンプレートウィザードを使ってみる
.NET Frameworkプロジェクトでは、テンプレートの種類の3番目の項目として「データソースの定義からテンプレートを作成する」が表示されますが、.NETプロジェクトではこの機能を利用できないため表示されません。

テンプレートのモードを選択します。

テンプレートウィザードを使ってみる

レイアウトのデザインを設定します。

テンプレートウィザードを使ってみる

テンプレートのスタイルを設定します。

テンプレートウィザードを使ってみる

最後に[完了]ボタンをクリックします。

テンプレートウィザードを使ってみる

テンプレートウィザードが完了すると、設定したテンプレートが作成されます。

テンプレートウィザードを使ってみる

テンプレートデザイナを使ってテンプレートを作成する

前述のようにテンプレートウィザードで作成した雛型のテンプレートに対してテンプレートデザイナを使用することもできますが、ここでは最初からテンプレートデザイナだけを使ってテンプレートを作成する方法を紹介します。

ソリューションエクスプローラーで、プロジェクトのコンテキストメニューから[追加]-[新しい項目]を選択します。

テンプレートデザイナを使ってテンプレートを作成する

[新しい項目の追加]ダイアログで[C#の項目]-[Windows Forms]を選択します。リストから「MultiRow 13.0テンプレート」を選択して[追加]ボタンをクリックします。

テンプレートデザイナを使ってテンプレートを作成する

テンプレートデザイナが起動します。

テンプレートデザイナを使ってテンプレートを作成する
テンプレートデザイナを再起動するときは、ソリューションエクスプローラーでテンプレートファイルを右クリックし、「MultiRow 13.0 テンプレートデザイナーの表示」を選択します。このとき間違って「デザイナーの表示」を選択すると、製品ヘルプの[テンプレートを追加・表示する]-[テンプレートデザイナの起動方法]に記載しているように、オブジェクトのアイコンだけが表示され本来のデザイナは表示されません。

ツールボックスから次のようなセル型をテンプレートデザイナに配置して在庫管理を行うための多段明細グリッドを作成します。

表示名セル型Datafieldプロパティ
商品名TextBoxCellProduct
説明TextBoxCellDescription
区分名ComboBoxCellCategoryCode
区分コードTextBoxCellCategoryCode
単価NumericUpDownCellPrice
包装単位TextBoxCellUnit
在庫数NumericUpDownCellQuantity

テンプレートデザイナでセルを配置およびプロパティを設定する方法については、製品ヘルプで解説していますので、詳細はこちらを参照してください。

完成したテンプレートは次のようになります。テンプレートを作成した後にプロジェクトをリビルドしておきます。

テンプレートデザイナを使ってテンプレートを作成する

作成したテンプレートをMultiRowに設定する

フォームにMultiRowを追加する

ツールボックスからGcMultiRowを選択してForm1に追加します。追加した後に「親コンテナにドッキングする」をクリックしておきます。

フォームにMultiRowを追加する

MultiRowにテンプレートを設定する

MultiRowの右上隅にあるスマートタグをクリックします。表示されたメニューから「テンプレートの選択」をクリックして「他のテンプレート」配下にある作成済みのテンプレート「Template2」を選択します。

フォームにMultiRowを追加する

選択したテンプレートがMultiRowに設定されます。

フォームにMultiRowを追加する
テンプレートを作成した後にはプロジェクトのリビルドが必要です。リビルドを行わない場合、「テンプレートの選択」のリストに作成したテンプレートが表示されません。

データソースを作成、接続する

.NETプロジェクトでは設計時にデータソースと連結できないため、データソースとの連結はコードで行う必要があります。下記のコードでは、Form1のコンストラクタ内で次の処理を行っています。

  • CreateData
    • MultiRowとComboBoxCellに連結するデータソースの作成
  • InitializeMultiRow
    • テンプレート上のComboBoxCellにデータソースを連結
    • MultiRowにデータソースを連結
    • 交互行スタイルの設定

データソースには、MultiRowに連結するList<InventoryItem>とComboBoxCellに連結するList<Category>を追加します。ComboBoxCellでは、MultiRowに連結されたList<InventoryItem>CategoryCodeフィールドに対応するCategoryNameフィールドの値を表示するためにList<Category>を使います。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        // データの作成
        var (inventoryList, categoryList) = CreateData();

        // MultiRowの設定
        InitializeMultiRow(inventoryList, categoryList);
    }

    private (List<InventoryItem>, List<Category>) CreateData()
    {
        var inventoryList = new List<InventoryItem>
        {
            new() { Product = "果汁100% オレンジ", Discription = "清爽飲料", CategoryCode = "A001", Price = 200, Unit = "200g×12瓶", Quantity = 10 },
            new() { Product = "果汁100% グレープ", Discription = "清爽飲料", CategoryCode = "A001", Price = 200, Unit = "200g×12瓶", Quantity = 12 },
            new() { Product = "果汁100% レモン", Discription = "清爽飲料", CategoryCode = "A001", Price = 200, Unit = "200g×12瓶", Quantity = 12 },
            new() { Product = "果汁100% ピーチ", Discription = "清爽飲料", CategoryCode = "A001", Price = 200, Unit = "200g×12瓶", Quantity = 12 },
            new() { Product = "コーヒーマイルド", Discription = "コーヒー", CategoryCode = "A001", Price = 190, Unit = "195g×10缶", Quantity = 12 },
            new() { Product = "コーヒービター", Discription = "コーヒー", CategoryCode = "A001", Price = 190, Unit = "195g×10缶", Quantity = 120 },
            new() { Product = "コーヒーミルク", Discription = "コーヒー", CategoryCode = "A001", Price = 190, Unit = "195g×10缶", Quantity = 10 },
            new() { Product = "ピリピリ ビール", Discription = "ビール", CategoryCode = "A002", Price = 280, Unit = "320ml×24本", Quantity = 120 },
            new() { Product = "オタル白ラベル", Discription = "ビール", CategoryCode = "A002", Price = 300, Unit = "250ml×24本", Quantity = 10 },
            new() { Product = "バードワイン", Discription = "ワイン", CategoryCode = "A002", Price = 250, Unit = "350ml×24缶", Quantity = 10 },
            new() { Product = "清爽スカッシュ", Discription = "清爽飲料", CategoryCode = "A001", Price = 190, Unit = "190g×12缶", Quantity = 30 },
            new() { Product = "清爽レモン", Discription = "清爽飲料", CategoryCode = "A001", Price = 190, Unit = "190g×12缶", Quantity = 50 },
            new() { Product = "スポーツ飲料パワー", Discription = "清爽飲料", CategoryCode = "A001", Price = 180, Unit = "200g×12缶", Quantity = 50 },
            new() { Product = "ナイトワイン", Discription = "ワイン", CategoryCode = "A002", Price = 500, Unit ="1Lボトル×12瓶", Quantity = 200 },
            new() { Product = "ボトルウイスキー", Discription = "ウィスキー", CategoryCode ="A002", Price = 1500, Unit = "500ml×12瓶", Quantity =30 },
        };

        var categoryList = new List<Category>
        {
            new() { CategoryCode = "A001", CategoryName = "飲料" },
            new() { CategoryCode = "A002", CategoryName = "酒類" },
        };

        return (inventoryList, categoryList);
    }

    private void InitializeMultiRow(List<InventoryItem> inventoryList, List<Category> categoryList)
    {
        // コンボボックス型セルのデータ連結
        var comboCell = (ComboBoxCell)template21.Row.Cells["comboBoxCell1"];
        comboCell.DataSource = categoryList;
        gcMultiRow1.Template = template21;

        // MultiRowの設定
        gcMultiRow1.AllowUserToAddRows = false;
        gcMultiRow1.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(100, Color.PaleGreen);
        gcMultiRow1.AlternatingRowsDefaultHeaderCellStyle.BackColor = Color.FromArgb(100, Color.PaleGreen);
        gcMultiRow1.DataSource = inventoryList;
    }
}

public class InventoryItem
{
    public string? Product { get; set; }
    public string? Discription { get; set; }
    public string? CategoryCode { get; set; }
    public int Price { get; set; }
    public string? Unit { get; set; }
    public int Quantity { get; set; }
}

public class Category
{
    public string? CategoryCode { get; set; }
    public string? CategoryName { get; set; }
}

最後にプロジェクトをデバッグ実行すると、次のようなMultiRowによる多段明細グリッドが表示されます。

データソースを作成、接続する

上記で紹介した動作を確認できるサンプルはこちらです。

テンプレートデザイン機能の.NETプロジェクト対応について

MultiRow for Windows Forms 12.0J以前では、該当するバージョンの製品ヘルプ過去の記事に記載しているように、.NETプロジェクトにおいてテンプレートデザイン機能を使うことができませんでした。そのため、メインの .NETプロジェクトとは別に .NET Frameworkプロジェクトを追加し、そのプロジェクト上でテンプレートデザイン機能を使用する必要がありました。

一方、MultiRow for Windows Forms 13.0Jでは .NETプロジェクトで直接テンプレートデザイン機能を使えるようになり、設計時にテンプレートを作成するときの工数が大幅に削減することが可能です。

なお、前述したように、.NETプロジェクトでテンプレートデザイナを使う場合には、いくつかの制限事項があります。それらに該当する場合は、製品ヘルプに記載しているように以前のバージョンと同じ方法で .NET Frameworkプロジェクトをソリューションに追加することを検討してください。

さいごに

今回は、MultiRow for Windows Forms 13.0Jで拡張されたデザイン機能を利用して、.NETプロジェクトでテンプレートウィザードとテンプレートデザイナを使う方法をご紹介しました。

製品サイトでは、MultiRowの機能を手軽に体験できるデモアプリケーションやトライアル版も公開しておりますので、こちらもご確認ください。

また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。

\  この記事をシェアする  /