PowerTools CalendarGrid for Windows Forms 1.0J
VirtualMode プロパティ
使用例 

ユーザーが GcCalendarGrid コントロールに独自のデータ管理操作を提供するかどうかを示す値を取得または設定します。
構文
Public Property VirtualMode As Boolean
public bool VirtualMode {get; set;}

プロパティ値

GcCalendarGrid コントロールで、ユーザーが提供したデータ管理操作が使用されるようにする場合は true。それ以外の場合は false。既定値は false です。
解説

仮想モードは、大量のデータを取り扱う場合を想定して設計されています。VirtualMode プロパティが true の場合は、一定の行数の GcCalendarGrid コントロールを作成してから、CellValueNeeded イベントを処理してセルにデータを格納します。仮想モードを使用するには、ユーザーの操作に基づいて GcCalendarGrid のセルのデータ格納、編集、および削除を処理するために、基になるデータキャッシュの実装が必要となります。

コードによっては、仮想モードを実装することで GcCalendarGrid のデータアクセスパフォーマンスが向上する場合があります。

仮想モードに関連するイベントを次の表に示します。

イベント 説明
CellValueNeeded このイベントは、コントロールがセルを描画するときや、セル値を必要とするその他のアクションを実行するときなど、データからの値が要求されたときに発生します。開発者はこのイベントを処理し、CalendarCellEventArgs.CellPosition に基づいてデータストアにマップする特定の値を CalendarCellValueEventArgs.Value プロパティに設定する必要があります。
CellValuePushed このイベントは、ユーザーがセル値を編集してその値をコミットしたときなど、特定のセル値が変更されたことを通知するために発生します。開発者はこのイベントを処理してデータストアを更新する必要があります。新しい値の情報は CalendarCellValueEventArgs.Value プロパティに含まれます。編集されたセルの位置を特定するには、CalendarCellValueEventArgsCalendarCellEventArgs.CellPosition を取得します。

このプロパティは、GcCalendarGrid がデータバインディングモードのときには無効です。

使用例
次のサンプルコードは、仮想モード機能を使用して GcCalendarGrid にデータを提供する方法を示します。
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Collections.Generic;
using GrapeCity.Win.CalendarGrid;

namespace CalendarGridSampleCode
{
    class VirtualModeDemo : Form
    {
        GcCalendarGrid gcCalendarGrid = new GcCalendarGrid();
        private Dictionary<CalendarCellPosition, object> _valueCache = new Dictionary<CalendarCellPosition, object>();

        public VirtualModeDemo()
        {
            gcCalendarGrid.Template = this.CreateTemplate();
            gcCalendarGrid.Dock = DockStyle.Fill;

            gcCalendarGrid.VirtualMode = true;
            gcCalendarGrid.CellValueNeeded += gcCalendarGrid_CellValueNeeded;
            gcCalendarGrid.CellValuePushed += gcCalendarGrid_CellValuePushed;

            this.Text = "Virtual Mode Demo";
            this.Controls.Add(gcCalendarGrid);
        }

        void gcCalendarGrid_CellValueNeeded(object sender, CalendarCellValueEventArgs e)
        {
            if (_valueCache.ContainsKey(e.CellPosition))
            {
                e.Value = _valueCache[e.CellPosition];
            }
            else
            {
                e.Value = "Edit Me";
            }
        }

        void gcCalendarGrid_CellValuePushed(object sender, CalendarCellValueEventArgs e)
        {
            if (_valueCache.ContainsKey(e.CellPosition))
            {
                //Same the value by your own.
                _valueCache[e.CellPosition] = e.Value;
            }
            else
            {
                _valueCache.Add(e.CellPosition, e.Value);
                //If the value is saved by user, change the back color.
                this.gcCalendarGrid[e.CellPosition.Date][e.CellPosition.RowIndex, e.CellPosition.ColumnIndex].CellStyle.BackColor = Color.Lime;
            }
        }
        private CalendarTemplate CreateTemplate()
        {
            CalendarTemplate calendarTemplate1 = new CalendarTemplate();
            GrapeCity.Win.CalendarGrid.CalendarHeaderCellType calendarHeaderCellType1 = new GrapeCity.Win.CalendarGrid.CalendarHeaderCellType();

            calendarTemplate1.RowCount = 2;
            calendarTemplate1.RowHeaderColumnCount = 0;
            calendarTemplate1.ColumnHeader.CellStyleName = "defaultStyle";
            calendarHeaderCellType1.SupportLocalization = true;
            calendarTemplate1.ColumnHeader.GetCell(0, 0).CellType = calendarHeaderCellType1;
            calendarTemplate1.ColumnHeader.GetCell(0, 0).DateFormat = "{DayOfWeek}";
            calendarTemplate1.ColumnHeader.GetCell(0, 0).CellStyle.Alignment = GrapeCity.Win.CalendarGrid.CalendarGridContentAlignment.MiddleCenter;
            calendarTemplate1.Content.CellStyleName = "defaultStyle";
            calendarTemplate1.Content.GetCell(0, 0).DateFormat = "d日";
            calendarTemplate1.Content.GetCell(0, 0).DateFormatType = GrapeCity.Win.CalendarGrid.CalendarDateFormatType.DotNet;

            return calendarTemplate1;
        }

        [STAThreadAttribute()]
        public static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new VirtualModeDemo());
        }
    }
}
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Collections.Generic
Imports GrapeCity.Win.CalendarGrid

Namespace CalendarGridSampleCode
    Class VirtualModeDemo
        Inherits Form
        Private gcCalendarGrid As New GcCalendarGrid()
        Private _valueCache As New Dictionary(Of CalendarCellPosition, Object)()

        Public Sub New()
            gcCalendarGrid.Template = Me.CreateTemplate()
            gcCalendarGrid.Dock = DockStyle.Fill

            gcCalendarGrid.VirtualMode = True
            AddHandler gcCalendarGrid.CellValueNeeded, AddressOf gcCalendarGrid_CellValueNeeded
            AddHandler gcCalendarGrid.CellValuePushed, AddressOf gcCalendarGrid_CellValuePushed

            Me.Text = "Virtual Mode Demo"
            Me.Controls.Add(gcCalendarGrid)
        End Sub

        Private Sub gcCalendarGrid_CellValueNeeded(sender As Object, e As CalendarCellValueEventArgs)
            If _valueCache.ContainsKey(e.CellPosition) Then
                e.Value = _valueCache(e.CellPosition)
            Else
                e.Value = "Edit Me"
            End If
        End Sub

        Private Sub gcCalendarGrid_CellValuePushed(sender As Object, e As CalendarCellValueEventArgs)
            If _valueCache.ContainsKey(e.CellPosition) Then
                'Same the value by your own.
                _valueCache(e.CellPosition) = e.Value
            Else
                _valueCache.Add(e.CellPosition, e.Value)
                'If the value is saved by user, change the back color.
                Me.gcCalendarGrid(e.CellPosition.[Date])(e.CellPosition.RowIndex, e.CellPosition.ColumnIndex).CellStyle.BackColor = Color.Lime
            End If
        End Sub
        Private Function CreateTemplate() As CalendarTemplate
            Dim calendarTemplate1 As New CalendarTemplate()
            Dim calendarHeaderCellType1 As New GrapeCity.Win.CalendarGrid.CalendarHeaderCellType()

            calendarTemplate1.RowCount = 2
            calendarTemplate1.RowHeaderColumnCount = 0
            calendarTemplate1.ColumnHeader.CellStyleName = "defaultStyle"
            calendarHeaderCellType1.SupportLocalization = True
            calendarTemplate1.ColumnHeader.GetCell(0, 0).CellType = calendarHeaderCellType1
            calendarTemplate1.ColumnHeader.GetCell(0, 0).DateFormat = "{DayOfWeek}"
            calendarTemplate1.ColumnHeader.GetCell(0, 0).CellStyle.Alignment = GrapeCity.Win.CalendarGrid.CalendarGridContentAlignment.MiddleCenter
            calendarTemplate1.Content.CellStyleName = "defaultStyle"
            calendarTemplate1.Content.GetCell(0, 0).DateFormat = "d日"
            calendarTemplate1.Content.GetCell(0, 0).DateFormatType = GrapeCity.Win.CalendarGrid.CalendarDateFormatType.DotNet

            Return calendarTemplate1
        End Function

        <STAThreadAttribute> _
        Public Shared Sub Main()
            Application.EnableVisualStyles()
            Application.Run(New VirtualModeDemo())
        End Sub
    End Class
End Namespace
参照

GcCalendarGrid クラス
GcCalendarGrid メンバ
CellValueNeeded イベント
CellValuePushed イベント

 

 


© 2014 GrapeCity inc. All rights reserved.