いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

DataGridView入門記-17 (行に規定値を表示)(DefaultValuesNeeded)

DefaultValuesNeededイベントは、新規行の入力が
要求された際に発生するイベントです。


新規行が作成される際のデフォルトの値は、ドキュメントに
あるようにCellTemplateプロパティからの値が使用されます。


DefaultValuesNeededイベントを利用するとその値を
上書きして規定値を行に表示させることが出来ます。


以下サンプルです。

// vim:set ts=4 sw=4 et ws is nowrap ft=cs:

using System;
using System.Drawing;
using System.Windows.Forms;

using Gsf.Samples.Utility;

namespace Gsf.Samples.DGV{

    /// <summary>
    /// DefaultValuesNeededイベントのサンプルです。
    /// </summary>
    /// <remarks>
    /// DefaultValuesNeededイベントは、新規行の入力が
    /// 要求された際に発生するイベントです。
    ///
    /// 新規行が作成される際のデフォルトの値は、ドキュメントに
    /// あるようにCellTemplateの値が使用されます。
    ///
    /// DefaultValuesNeededイベントを利用するとその値を
    /// 上書きして規定値を行に表示させることが出来ます。
    /// </remarks>
    public class DataGridViewSample17 : BaseForm{

        public DataGridViewSample17() : base(typeof(DataGridViewSample17).FullName){
            // nop;
        }

        protected override void InitializeComponents(){
            DataGridView grid = new DataGridView();

            grid.Name                = "grid";
            grid.Dock                = DockStyle.Fill;
            grid.AutoGenerateColumns = true;
            grid.DataSource          = GetDataSource();
            grid.EditMode            = DataGridViewEditMode.EditOnEnter;

            //
            // イベント設定
            //
            grid.DefaultValuesNeeded += OnDefaultValuesNeeded;

            Controls.Add(grid);

            Load += delegate(object sender, EventArgs e){

                // Idのカラムを読み取り専用に
                ((DataGridView) ((Form) sender).Controls.Find("grid", false)[0]).Columns["Id"].ReadOnly = true;

            };

            Size = new Size(400, 300);
        }

        void OnDefaultValuesNeeded(object sender, DataGridViewRowEventArgs e){
            // IDの値はシステム側で採番する
            e.Row.Cells["Id"].Value = Guid.NewGuid().ToString();
        }

        object GetDataSource(){
            BindingSource source = new BindingSource();

            source.DataSource = typeof(Sample);

            return source;
        }

        [STAThread]
        static void Main(){
            ApplicationUtility.Launch(typeof(DataGridViewSample17).FullName);
        }
    }

    internal class Sample{
        string _id;
        string _name;

        public Sample() : this(null, null){
            // nop;
        }

        public Sample(string id, string name){
            _id   = id;
            _name = name;
        }

        public string Id{
            get{
                return _id;
            }
            set{
                _id = value;
            }
        }

        public string Name{
            get{
                return _name;
            }
            set{
                _name = value;
            }
        }
    }
}


================================
過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。