FlexGrid for WinForms
日付
> エディタ > 日付
FlexGrid は、デフォルトでは、すべての Date 型および DateTime 型のデータで日付エディタを使用します。日付エディタは、クリックすることでカレンダーが表示されるドロップダウンです。ユーザーは、このカレンダー内を移動して目的の日付を選択できます。ユーザーは、エディタで日、月、年を選択したり上/下矢印キーを押すだけで、日、月、年を変更できます。
デフォルトの日付エディタ カレンダーなしの日付エディタ スピンボタン付きの日付エディタ
組み込み日付エディタ カレンダーなしの日付エディタ スピンボタン付きの日付エディタ

WinForms FlexGrid の列に日付エディタを作成するには、次のコードを使用します。

  // データ型プロパティをDateTimeに設定します
  c1FlexGrid1.Cols[1].DataType = typeof(DateTime);                        
' データ型プロパティをDateTimeに設定します
c1FlexGrid1.Cols(1).DataType = GetType(Date) 

カレンダーを表示しない入力

上記のように、FlexGrid の DateTime 型のセルは、ユーザーからの入力を受け付けるためのドロップダウンカレンダーを自動的に表示します。ただし、カレンダーを表示しないでユーザーから日付入力を受け取ることもできます。それには、EditMask プロパティを使用してマスクを設定し、次に ValidateEdit イベントを使用して入力値を検証します。

次のコードは、WinForms FlexGrid でカレンダーなしの日付エディタを作成する方法を示します。

 // 列にマスクを設定します
 c1flexGrid1.Cols[3].EditMask = "00/00/0000";
' 列にマスクを設定します
c1flexGrid1.Cols(3).EditMask = "00/00/0000"       
セルのマスクと検証の詳細については、 マスク および 検証 のトピックをそれぞれ参照してください。カレンダーを非表示にするもう 1 つの方法は、スピンボタンを使用してユーザー入力を取得することです。

スピンボタンを使用した入力

以下のコードは、スピンボタン付きの日付エディタを作成する方法を示しています。

日付エディタにスピンボタンを表示するには、SetupEditor イベントを使用してエディタを DateTimePicker に変換し、その ShowUpDown プロパティを true に設定します。

   private void C1flexGrid1_SetupEditor(object sender, RowColEventArgs e)
    {
     if (c1flexGrid1.Cols[e.Col].Name == "DOB")
      {
       // FlexGridの現在のセルエディタをキャストします 
          var dateEditor = c1flexGrid1.Editor as DateTimePicker;

       // UpDownボタンを表示します(カレンダーのドロップダウンボタンを置き換えます)
          dateEditor.ShowUpDown = true;
      }
    }      
Private Sub C1flexGrid1_SetupEditor(ByVal sender As Object, ByVal e As RowColEventArgs)
    If c1flexGrid1.Cols(e.Col).Name Is "DOB" Then
        ' FlexGridの現在のセルエディタをキャストします 
        Dim dateEditor = TryCast(c1flexGrid1.Editor, DateTimePicker)

        ' UpDownボタンを表示します(カレンダーのドロップダウンボタンを置き換えます)
        dateEditor.ShowUpDown = True
    End If
End Sub        

日付書式の設定

Date 型の列に書式を設定するには、Column オブジェクトの Format プロパティを設定する必要があります。 

次の表に、定義済みの書式をリストします。

書式
短い日付 d

11/19/2003

長い日付 D Friday, November 19, 2003
Short Time t 12:15 AM
Long Time T 12:15:30 AM

.NET Framework のさまざまな書式指定子を使用して、カスタム書式を作成することもできます。詳細については、Microsoft Web サイトの「カスタム日時書式文字列」を参照してください。

次のコードを使用すると、WinForms FlexGrid 列にカスタム日付書式を作成できます。

  // 事前定義された書式を設定します
  c1FlexGrid1.Cols[DOB].Format = "d";     
                                        
  // カスタム書式を設定します
  c1FlexGrid1.Cols[OrderDate].Format = "dd/MM/yyyy";                        
    ' 事前定義された書式を設定します
    c1FlexGrid1.Cols(DOB).Format = "d"

    ' カスタム書式を設定します
    c1FlexGrid1.Cols(OrderDate).Format = "dd/MM/yyyy"  

国固有の日付書式の表示

上記の書式は最もよく使用される日付書式ですが、日本など、固有のカレンダーと日付書式を使用する方がよい場合もあります。固有のカレンダーと日付書式は、C1FlexGrid クラスの OwnerDrawCell イベントと System.Globalization 名前空間を使用して表示できます。この名前空間は、カレンダーや日付書式など、カルチャ関連情報を定義するさまざまなクラスを提供します。たとえば、和暦と日本の日付書式を表示するには、System.Globalization.JapaneseCalendar クラスを利用します。同様に、グレゴリオ暦、ヘブライ暦、イスラム暦、韓国暦などのカレンダーも表示できます。

国固有のカレンダーと日付書式

次のコードを使用して、WinForms FlexGrid で国固有の日付書式を設定します。

   c1flexGrid1.Cols["DOB"].Format = "dd/MM/yyyy";
   c1flexGrid1.DrawMode = DrawModeEnum.OwnerDraw;
   c1flexGrid1.OwnerDrawCell += C1flexGrid1_OwnerDrawCell;
   private void C1flexGrid1_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
    {
       if (c1flexGrid1.Cols[e.Col].DataType == typeof(DateTime) && e.Row >= c1flexGrid1.Rows.Fixed)
          {
            e.Text = DateTime.Parse(e.Text).ToString("yyyy年MM月dd日(dddd)", c);
          }       
    }       
 C1FlexGrid1.Cols("DOB").Format = "dd/MM/yyyy"
  
C1FlexGrid1.DrawMode = DrawModeEnum.OwnerDraw

AddHandler C1FlexGrid1.OwnerDrawCell, AddressOf C1flexGrid1_OwnerDrawCell

Private Sub C1flexGrid1_OwnerDrawCell(ByVal sender As Object, ByVal e As OwnerDrawCellEventArgs)
     If C1FlexGrid1.Cols(e.Col).DataType = GetType(DateTime) AndAlso e.Row >= C1FlexGrid1.Rows.Fixed Then
        e.Text = DateTime.Parse(e.Text).ToString("yyyy年MM月dd日(dddd)", c)
     End If
 End Sub     

最小/最大日付の設定

有効な値の範囲を設定するには、DateTimePicker コントロールをエディタとして使用し、その MinDate プロパティと MaxDate プロパティを設定します。

WinForms FlexGrid で有効な日付の範囲を設定するには、次のコードを使用します。

   DateTimePicker dateTimePicker = new DateTimePicker();
   dateTimePicker.Format = DateTimePickerFormat.Short;

   // 最大日と最小日を設定します 
   dateTimePicker.MinDate = new DateTime(2015, 05, 01);
   dateTimePicker.MaxDate = DateTime.Today;

   // DateTimePickerコントロールをFirstOrderDate(date)列のエディターとして割り当てます
   c1flexGrid1.Cols["FirstOrderDate"].Editor = dateTimePicker;    
    Dim dateTimePicker As DateTimePicker = New DateTimePicker()
    dateTimePicker.Format = DateTimePickerFormat.[Short]

    ' 最大日と最小日を設定します 
    dateTimePicker.MinDate = New DateTime(2015, 05, 01)
    dateTimePicker.MaxDate = Date.Today

    ' DateTimePickerコントロールをFirstOrderDate(date)列のエディターとして割り当てます
    c1flexGrid1.Cols("FirstOrderDate").Editor = dateTimePicker      
関連トピック