プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

C#のDataGridViewで入力された値を検証する

この記事は2022年06月15日に投稿しました。

目次

  1. はじめに
  2. C#のDataGridViewで入力された値を検証する
  3. おわりに

1. はじめに

こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているC#のDataGridViewで入力された値を検証する方法についてです。

目次へ

2. C#のDataGridViewで入力された値を検証する

C#のDataGridViewで入力された値を検証するには、CellValidatingイベントを使用します。

実装例

using System;
using System.Windows.Forms;

namespace SampleDataGridViewCellValidating
{
    public partial class MainForm : Form
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public MainForm()
        {
            // コンポーネントを初期化します。
            InitializeComponent();
        }

        /// <summary>
        /// フォームがロードされた時に呼び出されます。
        /// </summary>
        /// <param name="sender">フォーム</param>
        /// <param name="e">イベント</param>
        private void MainForm_Load(object sender, EventArgs e)
        {            
            // データグリッドに列を追加します。
            DataGridView.Columns.Add(new DataGridViewColumn() { CellTemplate = new DataGridViewTextBoxCell() });
            DataGridView.Columns.Add(new DataGridViewColumn() { CellTemplate = new DataGridViewTextBoxCell() });

            // 行ヘッダーを設定します。
            DataGridView.Columns[0].HeaderText = "名前";
            DataGridView.Columns[1].HeaderText = "年齢";

            // データグリッドに行を追加します。
            DataGridView.Rows.Add("太郎", 20);
            DataGridView.Rows.Add("次郎", 18);
            DataGridView.Rows.Add("三郎", 7);

            // 行の追加を禁止します。
            DataGridView.AllowUserToAddRows = false;
        }

        /// <summary>
        /// セルの検証中に呼び出されます。
        /// </summary>
        /// <param name="sender">データグリッドビュー</param>
        /// <param name="e">イベント</param>
        private void DataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            // 対象のセルの行インデックスと列インデックスを取得します。
            var rowIndex = e.RowIndex;
            var columnIndex = e.ColumnIndex;

            // ヘッダ行またはヘッダ列の場合
            if ((rowIndex < 0) || (columnIndex < 0))
            {
                // 何もしません。
                return;
            }

            // 年齢列ではない場合
            if ((columnIndex != 1))
            {
                // 何もしません。
                return;
            }

            // 入力前の値を取得します。
            var dataGridView = (DataGridView)sender;
            var oldValue = dataGridView.Rows[rowIndex].Cells[columnIndex].Value.ToString();

            // 入力された値を取得します。
            var newValue = e.FormattedValue.ToString();

            // 値が変更されていない場合
            if (oldValue.Equals(newValue))
            {
                // 何もしない。
                return;
            }

            // 入力された値が整数ではない場合
            var nValue = 0;
            if (!int.TryParse(newValue, out nValue))
            {
                MessageBox.Show("正の正数を入力してください。");

                // 入力を無効にする。
                e.Cancel = true;
                return;
            }

            // 負の数の場合
            if (nValue < 0)
            {
                MessageBox.Show("正の正数を入力してください。");

                // 入力を無効にする。
                e.Cancel = true;
                return;
            }
        }
    }
}

実行結果

入力前

正の正数以外を入力後

API Reference

DataGridViewクラス

CellValidatingイベント

目次へ

3. おわりに

セルの入力で、正の正数のみを入力可とする必要があり、その方法を調査しました。

紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。

目次へ


私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。

また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。

EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688

目次へ