■93529 / inTopicNo.9) |
Re[5]: 日付とイベントのデータグリッドビューへの表示について |
□投稿者/ WebSurfer (1996回)-(2019/12/18(Wed) 11:00:24)
|
■No93524 (mookko さん) に返信
> リストにしたところ、目的の列にデータが表示できました。ありがとうございます。
List<string> 型のリストを 3 つ作って日付、開始時刻、終了時刻を取得し、それをそれぞれ
DataGridView の 1 〜 3 列に表示するように考えたと理解しています。
しかし、私がレスした List<T> を使うというのはそういう意味ではないです。
T というのはクラスで、例えば以下のようなクラスを定義します。
public class Record
{
public string Date { get; set; }
public string Start { set; get; }
public string End { set; get; }
}
Record の Date に日付、Start に開始時刻、End に終了時刻を設定し、List<Record> 型のオブ
ジェクトに Add していきます。以下のような感じです(イベントログから開始時刻と終了時刻
を取得するとことは簡略化しました)。
protected List<Record> GetRecords()
{
List<Record> records = new List<Record>();
DateTime dt = DateTime.Now;
int iDays = DateTime.DaysInMonth(dt.Year, dt.Month);
for (int i = 1; i <= iDays; i++)
{
records.Add(new Record
{
Date = new DateTime(dt.Year, dt.Month, i).ToString("d"),
Start = "08:00:00",
End = "17:00:00"
});
}
return records;
}
それを BindingSource 経由で DataGirdView にデータバインドします。全体的には以下のよう
になります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinFormsApp1
{
public partial class Form1 : Form
{
private DataGridView dataGridView1;
private BindingSource bindingSource1;
public Form1()
{
InitializeComponent();
this.dataGridView1 = new DataGridView();
this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.bindingSource1 = new BindingSource();
this.dataGridView1.DataSource = this.bindingSource1;
this.Controls.Add(this.dataGridView1);
}
private void Form1_Load(object sender, EventArgs e)
{
this.bindingSource1.DataSource = GetRecords();
}
protected List<Record> GetRecords()
{
List<Record> records = new List<Record>();
DateTime dt = DateTime.Now;
int iDays = DateTime.DaysInMonth(dt.Year, dt.Month);
for (int i = 1; i <= iDays; i++)
{
records.Add(new Record
{
Date = new DateTime(dt.Year, dt.Month, i).ToString("d"),
Start = "08:00:00",
End = "17:00:00"
});
}
return records;
}
}
public class Record
{
public string Date { get; set; }
public string Start { set; get; }
public string End { set; get; }
}
}
上のコードでは Form.Load イベントでデータバインドしてますが、そこは質問者さんのやりた
いこと(Button クリックで表示?)に合わせて適宜変更してください。
後は全て DataGridView がやってくれます。結果は以下の画像のようになります。
http://surferonwww.info/BlogEngine/image.axd?picture=2019%2f12%2f1218result.jpg
|
|