MESCIUS CalendarGrid for Windows Forms 4.0J > CalendarGridの使い方 > データベースとの連結 |
CalendarGridはADO.NETを使用してデータベースに接続できます。データソースの指定した日付フィールドと一致する日付に関連するデータをCalendarGridのセルに読み出せます。
注意
|
データソースに日付型のフィールドが存在するとき、GcCalendarGridの次のプロパティにデータソースの情報を指定すると、GcCalendarGridはデータソースの1レコードを1日の情報として読み込みます。
プロパティ | データソース |
---|---|
GcCalendarGrid.DataSource |
対象のデータセット |
GcCalendarGrid.DataMember |
対象のテーブル名 |
GcCalendarGrid.DataField |
テーブルに含まれる日付型のフィールドの名前 |
読み込まれたレコードの情報は、1日に含まれる各セルに表示できます。CalendarCell.DataFieldプロパティを使ってどのセルにどのフィールドの情報を表示するかを指定できます。
次のコードは、サンプルのデータソースを作成しこれを指定したセルに読み込むようにGcCalendarGridコントロールを定義します。
Imports GrapeCity.Win.CalendarGrid Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim _dataSet As DataSet = Nothing Dim table As New DataTable("MyTable") table.Columns.Add("Date", GetType(DateTime)) table.Columns.Add("Field1", GetType(String)) table.Columns.Add("Field2", GetType(Integer)) table.BeginLoadData() For i As Integer = 1 To DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month) table.Rows.Add(New Object() {New DateTime(DateTime.Today.Year, DateTime.Today.Month, i), "Test " + i.ToString(), i}) Next table.EndLoadData() _dataSet = New DataSet("MyDataSet") _dataSet.Tables.Add(table) GcCalendarGrid1.DataSource = _dataSet GcCalendarGrid1.DataMember = "MyTable" GcCalendarGrid1.DateField = "Date" Dim template As CalendarTemplate = GcCalendarGrid1.Template template.Content.Rows(1).Cells(0).DataField = "Field1" template.Content.Rows(2).Cells(0).DataField = "Field2" End Sub
using GrapeCity.Win.CalendarGrid; private void Form1_Load(object sender, EventArgs e) { DataSet _dataSet = null; var table = new DataTable("MyTable"); table.Columns.Add("Date", typeof(DateTime)); table.Columns.Add("Field1", typeof(string)); table.Columns.Add("Field2", typeof(int)); table.BeginLoadData(); for (int i = 0; i < DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month); i++) { table.Rows.Add(new object[] { new DateTime(DateTime.Today.Year, DateTime.Today.Month, i + 1), "Test " + i.ToString(), i }); } table.EndLoadData(); _dataSet = new DataSet("MyDataSet"); _dataSet.Tables.Add(table); gcCalendarGrid1.DataSource = _dataSet; gcCalendarGrid1.DataMember = "MyTable"; gcCalendarGrid1.DateField = "Date"; CalendarTemplate template = gcCalendarGrid1.Template; template.Content.Rows[1].Cells[0].DataField = "Field1"; template.Content.Rows[2].Cells[0].DataField = "Field2"; }
データソースに格納されている日付が日付型(DateTime型)以外の場合、GcCalendarGrid.ParseDateFieldイベントを使用してGcCalendarGrid.DateFieldプロパティに指定されたフィールドの解析方法をカスタマイズして対応できます。
次のコードは"20140226"のように、日付型ではない形式で格納されている値を日付として読みだす例です。
Imports GrapeCity.Win.CalendarGrid Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim _dataSet As DataSet = Nothing Dim table As New DataTable("MyTable") table.Columns.Add("Date", GetType(String)) table.Columns.Add("Field1", GetType(String)) table.Columns.Add("Field2", GetType(Integer)) table.BeginLoadData() For i As Integer = 1 To DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month) Dim date1 As DateTime = New DateTime(DateTime.Today.Year, DateTime.Today.Month, i) table.Rows.Add(New Object() {date1.ToString("yyyyMMdd"), date1.ToString("yyyyMMdd"), i}) Next table.EndLoadData() _dataSet = New DataSet("MyDataSet") _dataSet.Tables.Add(table) GcCalendarGrid1.DataSource = _dataSet GcCalendarGrid1.DataMember = "MyTable" GcCalendarGrid1.DateField = "Date" Dim template As CalendarTemplate = GcCalendarGrid1.Template template.Content.Rows(1).Cells(0).DataField = "Field1" template.Content.Rows(2).Cells(0).DataField = "Field2" End Sub Private Sub GcCalendarGrid1_ParseDateField(sender As Object, e As ParseDateFieldEventArgs) Handles GcCalendarGrid1.ParseDateField e.Date = DateTime.ParseExact(e.Value.ToString(), "yyyyMMdd", Nothing) End Sub
using GrapeCity.Win.CalendarGrid; private void Form1_Load(object sender, EventArgs e) { DataSet _dataSet = null; gcCalendarGrid1.ParseDateField += gcCalendarGrid1_ParseDateField; var table = new DataTable("MyTable"); table.Columns.Add("Date", typeof(string)); table.Columns.Add("Field1", typeof(string)); table.Columns.Add("Field2", typeof(int)); table.BeginLoadData(); for (int i = 0; i < DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month); i++) { DateTime date1 = new DateTime(DateTime.Today.Year, DateTime.Today.Month, i + 1); table.Rows.Add(new object[] { date1.ToString("yyyyMMdd"), date1.ToString("yyyyMMdd"), i }); } table.EndLoadData(); _dataSet = new DataSet("MyDataSet"); _dataSet.Tables.Add(table); gcCalendarGrid1.DataSource = _dataSet; gcCalendarGrid1.DataMember = "MyTable"; gcCalendarGrid1.DateField = "Date"; CalendarTemplate template = gcCalendarGrid1.Template; template.Content.Rows[1].Cells[0].DataField = "Field1"; template.Content.Rows[2].Cells[0].DataField = "Field2"; } private void gcCalendarGrid1_ParseDateField(object sender, ParseDateFieldEventArgs e) { e.Date = DateTime.ParseExact(e.Value.ToString(), "yyyyMMdd", null); }
データ連結している場合、CalendarGridのデータを変更してセルの編集モードを終了すると、データソースに変更したデータが書き込まれます。
また、CalendarGrid上でデータ変更した日付がデータソースに存在しない場合は、変更したデータとそのデータに関連する日付がデータソースに追加されます。
注意
|
次のサンプルコードは、CalendarGrid上でデータを変更してセルの編集状態が完了したときに、データソースに書き込まれたデータの内容を確認します。
Imports GrapeCity.Win.CalendarGrid Dim _dataSet As DataSet = Nothing Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim table As New DataTable("MyTable") table.Columns.Add("Date", GetType(DateTime)) table.Columns.Add("Field1", GetType(String)) table.Columns.Add("Field2", GetType(Integer)) table.BeginLoadData() For i As Integer = 1 To 3 table.Rows.Add(New Object() {New DateTime(DateTime.Today.Year, DateTime.Today.Month, i), "Test " + i.ToString(), i}) Next table.EndLoadData() _dataSet = New DataSet("MyDataSet") _dataSet.Tables.Add(table) GcCalendarGrid1.DataSource = _dataSet GcCalendarGrid1.DataMember = "MyTable" GcCalendarGrid1.DateField = "Date" Dim template As CalendarTemplate = GcCalendarGrid1.Template template.Content.Rows(1).Cells(0).DataField = "Field1" template.Content.Rows(2).Cells(0).DataField = "Field2" End Sub Private Sub GcCalendarGrid1_CellEndEdit(sender As Object, e As CalendarCellEndEditEventArgs) Handles GcCalendarGrid1.CellEndEdit ' データソースのデータを取得します。 For i As Integer = 0 To _dataSet.Tables("MyTable").Rows.Count - 1 Console.WriteLine(String.Format("Date:{0}, Field1:{1}, Field2:{2}", _ _dataSet.Tables("MyTable").Rows(i)("Date").ToString(), _ _dataSet.Tables("MyTable").Rows(i)("Field1").ToString(), _ _dataSet.Tables("MyTable").Rows(i)("Field2").ToString())) Next End Sub
using GrapeCity.Win.CalendarGrid; DataSet _dataSet = null; private void Form1_Load(object sender, EventArgs e) { var table = new DataTable("MyTable"); table.Columns.Add("Date", typeof(DateTime)); table.Columns.Add("Field1", typeof(string)); table.Columns.Add("Field2", typeof(int)); table.BeginLoadData(); for (int i = 0; i < 3; i++) { table.Rows.Add(new object[] { new DateTime(DateTime.Today.Year, DateTime.Today.Month, i + 1), "Test " + i.ToString(), i }); } table.EndLoadData(); _dataSet = new DataSet("MyDataSet"); _dataSet.Tables.Add(table); gcCalendarGrid1.DataSource = _dataSet; gcCalendarGrid1.DataMember = "MyTable"; gcCalendarGrid1.DateField = "Date"; CalendarTemplate template = gcCalendarGrid1.Template; template.Content.Rows[1].Cells[0].DataField = "Field1"; template.Content.Rows[2].Cells[0].DataField = "Field2"; gcCalendarGrid1.CellEndEdit += gcCalendarGrid1_CellEndEdit; } private void gcCalendarGrid1_CellEndEdit(object sender, CalendarCellEndEditEventArgs e) { // データソースのデータを取得します。 for (int i = 0; i < _dataSet.Tables["MyTable"].Rows.Count; i++) { Console.WriteLine(string.Format("Date:{0}, Field1:{1}, Field2:{2}", _dataSet.Tables["MyTable"].Rows[i]["Date"].ToString(), _dataSet.Tables["MyTable"].Rows[i]["Field1"].ToString(), _dataSet.Tables["MyTable"].Rows[i]["Field2"].ToString())); } }
上記のサンプルコードを次の手順で実行すると、「6日」と「テスト4」が関連したデータとしてデータソースに書き込まれます。
Date:2014/06/01 0:00:00, Field1:Test 1, Field2:1 Date:2014/06/02 0:00:00, Field1:テスト2, Field2:2 Date:2014/06/03 0:00:00, Field1:Test 3, Field2:3 |
Date:2014/06/01 0:00:00, Field1:Test 1, Field2:1 Date:2014/06/02 0:00:00, Field1:テスト2, Field2:2 Date:2014/06/03 0:00:00, Field1:Test 3, Field2:3 Date:2014/06/06 0:00:00, Field1:テスト4, Field2: |