読者です 読者をやめる 読者になる 読者になる

いろいろ備忘録日記

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

DevExpress奮闘記-033 (DateEditにて時刻も編集できるようにする)(DateEdit, RepositoryItemDateEdit, FormatString, EditMask, VistaDisplayMode, VistaEditTime)

C# DevExpress


よく間違うのでメモメモ。
普通にRepositoryItemDateEditをカラムやセルのエディタとして利用すると
デフォルトでは、日付しか表示されません。


これは、デフォルトの設定が以下のようになっているからです。

RepositoryItemDateEdit.EditMask = "d";


.NETの書式設定仕様上、これは短い日付形式の設定となります。
なので、この部分を変更してやれば時刻も表示できるようになります。


また、ドロップダウンにて表示されるポップアップもデフォルトの設定では
時刻は編集できないようになっています。これは、以下の設定を行う事で
可能になります。

RepositoryItemDateEdit.VistaDisplayMode = DefaultBoolean.True;
RepositoryItemDateEdit.VistaEditTime    = DefaultBoolean.True;


具体的には、以下のように設定します。

RepositoryItemDateEdit.DisplayFormat.FormatString = "yyyy/MM/dd HH:mm:ss";
RepositoryItemDateEdit.EditMask                   = "yyyy/MM/dd HH:mm:ss";
RepositoryItemDateEdit.VistaDisplayMode           = DefaultBoolean.True;
RepositoryItemDateEdit.VistaEditTime              = DefaultBoolean.True;


以下、サンプルです。

#region DevExpressSamples-003
    public class DevExpressSamples003 : IExecutable {

        class Frm : XtraForm {

            public Frm() {
                InitializeComponent();
            }

            void InitializeComponent() {
                SuspendLayout();

                GridControl grid          = new GridControl();
                grid.Name                 = "grdMain";
                grid.Dock                 = DockStyle.Fill;
                grid.UseEmbeddedNavigator = true;

                GridView view = new GridView();
                grid.MainView = view;

                Controls.Add(grid);
                Size = new Size(600, 400);

                Load += (ls, le) => {
                    SetRepositoryItemsTo(grid);
                    CreateGridColumns(view);
                    SetDataSourceTo(grid);
                };

                ResumeLayout();
            }

            void SetRepositoryItemsTo(GridControl grid) {

                RepositoryItemDateEdit rpdTestDate = new RepositoryItemDateEdit();

                rpdTestDate.DisplayFormat.FormatString = "yyyy/MM/dd HH:mm:ss";
                rpdTestDate.EditMask                   = "yyyy/MM/dd HH:mm:ss";
                rpdTestDate.VistaDisplayMode           = DefaultBoolean.True;
                rpdTestDate.VistaEditTime              = DefaultBoolean.True;
                rpdTestDate.Name                       = "rpdTestDate";

                grid.RepositoryItems.Add(rpdTestDate);
            }

            void CreateGridColumns(GridView view) {

                GridColumn col = view.Columns.AddField("TEST_DATE");
                col.Name       = "colTestDate";
                col.Caption    = "TEST_DATE";
                col.ColumnEdit = view.GridControl.RepositoryItems["rpdTestDate"];
                col.Visible    = true;
            }

            void SetDataSourceTo(GridControl grid) {

                DataTable table = new DataTable();

                table.Columns.Add("TEST_DATE", typeof(DateTime));

                try {
                    table.BeginLoadData();
                    grid.MainView.BeginUpdate();

                    DateTime tmp = DateTime.Now;
                    for(int i = 0; i < 1000; i++) {
                        tmp = tmp.AddDays(1);
                        table.LoadDataRow(new object[]{ tmp }, true);
                    }
                } finally {
                    table.EndLoadData();
                    grid.MainView.EndUpdate();
                }

                grid.DataSource = table;
            }
        }

        public void Execute() {
            Application.EnableVisualStyles();
            Application.Run(new Frm());
        }
    }
#endregion