目次
経緯
C#でDataGridView
を使用している中で、「各列に日付を表示したい」と考える場面がありました。
Excelのように、1列ごとに日付を並べて表示する形式です。今回は、DateTime
構造体を使って日付の列を自動生成する方法を学びましたので、その実装方法を紹介いたします。
DateTimeを使って列ヘッダーに日付を追加する
以下のコードでは、2023年1月1日から31日間分の日付を、列としてDataGridView
に追加していく処理を実装しています。
// DataGridViewに表示する列数を指定する
int columnCount = 31;
// 日付のフォーマットを指定する(例:1/1, 1/2, ...)
string dateFormat = "M/d";
// 開始日を設定する
DateTime date = new DateTime(2023, 1, 1);
// 列幅の自動調整モードを設定する
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader;
// 日付を列として追加する
for (int i = 0; i < columnCount; i++)
{
string headerText = date.ToString(dateFormat);
dataGridView1.Columns.Add(headerText, headerText);
date = date.AddDays(1);
}
コードの解説
columnCount
:追加する列数を指定します。今回は31列(1か月分)です。dateFormat
:日付の表示形式を文字列で定義しています。例:「M/d」は「1/1」「1/2」のような表記になります。date
:開始日をDateTime
で定義します。任意の日付からスタート可能です。AutoSizeColumnsMode
:列幅の自動調整を行うための設定で、今回は列ヘッダーに合わせるモードを指定しています。for
ループ:日付を1日ずつ増加させながら、列を追加しています。列ヘッダーと内部名の両方に日付文字列を使っています。
実行結果のイメージ
このコードを実行すると、DataGridViewに以下のような日付が列として表示されます。
1/1 | 1/2 | 1/3 | … | 1/31 |
---|
それぞれの列は、DataGridViewのヘッダーとして日付が設定されており、Excel風のスケジュールやカレンダー表示にも応用可能です。
まとめ
DataGridViewの列に日付を表示したい場合は、DateTime
を利用してループ処理を行うことで、簡単に実現できます。
ポイントは、日付のフォーマットを任意に指定できることと、ループによる自動生成により可変的なカレンダー構造を作れる点です。
本記事の方法を応用すれば、たとえば月ごとに列数を変えたり、曜日も併せて表示するなど、さらに柔軟な表現も可能です。
少しでも参考になれば幸いです。
ここまでお読みいただき、ありがとうございました。