using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using GrapeCity.Win.CalendarGrid;
namespace CalendarGridSampleCode
{
public class EditingDemo : Form
{
private GcCalendarGrid gcCalendarGrid = new GcCalendarGrid();
public EditingDemo()
{
this.Text = "Editing Demo";
this.Size = new Size(800, 700);
this.StartPosition = FormStartPosition.CenterScreen;
gcCalendarGrid.Template = this.CreateTemplate();
gcCalendarGrid.CellContentButtonClick += gcCalendarGrid_CellContentButtonClick;
gcCalendarGrid.CellEditingValueChanged += gcCalendarGrid_CellEditingValueChanged;
gcCalendarGrid.CellBeginEdit += gcCalendarGrid_CellBeginEdit;
gcCalendarGrid.CellEndEdit += gcCalendarGrid_CellEndEdit;
gcCalendarGrid.CurrentCellPositionChanging += gcCalendarGrid_CurrentCellPositionChanging;
this.Load += EditingDemo_Load;
// Add GcCalendarGrid to form
this.gcCalendarGrid.Dock = DockStyle.Fill;
this.Controls.Add(this.gcCalendarGrid);
}
void gcCalendarGrid_CellEditingValueChanged(object sender, CalendarCellEditingValueChangedEventArgs e)
{
//This is a CheckBoxCell
if (e.CellPosition.Scope == CalendarTableScope.Content && e.CellPosition.RowIndex == 2 && e.CellPosition.ColumnIndex == 1)
{
if (object.Equals(e.Value, true))
{
this.gcCalendarGrid[e.CellPosition.Date][2, 0].Value = "True";
this.gcCalendarGrid[e.CellPosition.Date][2, 0].CellStyle.BackColor = Color.Lime;
}
else
{
this.gcCalendarGrid[e.CellPosition.Date][2, 0].Value = "False";
this.gcCalendarGrid[e.CellPosition.Date][2, 0].CellStyle.BackColor = Color.Red;
}
}
}
void gcCalendarGrid_CellContentButtonClick(object sender, CalendarCellEventArgs e)
{
//This is a button cell
if (e.CellPosition.Scope == CalendarTableScope.Content && e.CellPosition.RowIndex == 1 && e.CellPosition.ColumnIndex == 1)
{
CalendarCellPosition prevCell = new CalendarCellPosition(e.CellPosition.Date, 1, 0);
this.gcCalendarGrid.BeginEdit(false);
}
}
void gcCalendarGrid_CellBeginEdit(object sender, CalendarCellBeginEditEventArgs e)
{
if (GetMessageDeviceType() == MessageDeviceType.Touch
&& (e.CellPosition.Scope == CalendarTableScope.Content && e.CellPosition.RowIndex == 1 && e.CellPosition.ColumnIndex == 0))
{
gcCalendarGrid.ShowTouchKeyboard();
}
}
void gcCalendarGrid_CellEndEdit(object sender, CalendarCellEndEditEventArgs e)
{
gcCalendarGrid.HideTouchKeyboard();
}
void gcCalendarGrid_CurrentCellPositionChanging(object sender, CalendarCellPositionChangingEventArgs e)
{
if (e.NewCellPosition.Scope == CalendarTableScope.Content && e.NewCellPosition.RowIndex == 1 && e.NewCellPosition.ColumnIndex == 1)
{
e.NewCellPosition = new CalendarCellPosition(e.NewCellPosition.Date, 1, 0);
}
}
void EditingDemo_Load(object sender, EventArgs e)
{
for (int i = 0; i < this.gcCalendarGrid.LayoutSettings.HorizontalLayoutInfo.Count; i++)
{
this.gcCalendarGrid.LayoutSettings.PerformHorizontalAutoFit(i);
}
}
private CalendarTemplate CreateTemplate()
{
GrapeCity.Win.CalendarGrid.CalendarTemplate calendarTemplate1 = new GrapeCity.Win.CalendarGrid.CalendarTemplate();
GrapeCity.Win.CalendarGrid.CalendarHeaderCellType calendarHeaderCellType1 = new GrapeCity.Win.CalendarGrid.CalendarHeaderCellType();
GrapeCity.Win.CalendarGrid.CalendarHeaderCellType calendarHeaderCellType2 = new GrapeCity.Win.CalendarGrid.CalendarHeaderCellType();
GrapeCity.Win.CalendarGrid.CalendarButtonCellType calendarButtonCellType1 = new GrapeCity.Win.CalendarGrid.CalendarButtonCellType();
GrapeCity.Win.CalendarGrid.CalendarCheckBoxCellType calendarCheckBoxCellType1 = new GrapeCity.Win.CalendarGrid.CalendarCheckBoxCellType();
calendarTemplate1.ColumnCount = 2;
calendarTemplate1.RowCount = 3;
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).RowSpan = 1;
calendarTemplate1.ColumnHeader.GetCell(0, 0).ColumnSpan = 2;
calendarTemplate1.ColumnHeader.GetCell(0, 0).CellStyle.Alignment = GrapeCity.Win.CalendarGrid.CalendarGridContentAlignment.MiddleCenter;
calendarHeaderCellType2.SupportLocalization = true;
calendarTemplate1.ColumnHeader.GetCell(0, 1).CellType = calendarHeaderCellType2;
calendarTemplate1.Content.CellStyleName = "defaultStyle";
calendarTemplate1.Content.GetColumn(1).Width = 145;
calendarTemplate1.Content.GetRow(1).Height = 28;
calendarTemplate1.Content.GetRow(2).Height = 28;
calendarTemplate1.Content.GetCell(0, 0).DateFormat = "d日";
calendarTemplate1.Content.GetCell(0, 0).DateFormatType = GrapeCity.Win.CalendarGrid.CalendarDateFormatType.DotNet;
calendarTemplate1.Content.GetCell(0, 0).RowSpan = 1;
calendarTemplate1.Content.GetCell(0, 0).ColumnSpan = 2;
calendarButtonCellType1.SupportLocalization = true;
calendarTemplate1.Content.GetCell(1, 1).CellType = calendarButtonCellType1;
calendarTemplate1.Content.GetCell(1, 1).Value = "Click/Tap To Edit Cell";
calendarTemplate1.Content.GetCell(1, 1).CellStyle.Alignment = GrapeCity.Win.CalendarGrid.CalendarGridContentAlignment.MiddleCenter;
calendarCheckBoxCellType1.SupportLocalization = true;
calendarTemplate1.Content.GetCell(2, 1).CellType = calendarCheckBoxCellType1;
return calendarTemplate1;
}
// Mouse event is from touch or not.
[DllImport("user32.dll")]
private static extern uint GetMessageExtraInfo();
private static MessageDeviceType GetMessageDeviceType()
{
uint extra = GetMessageExtraInfo();
if ((extra & 0xFF515780) == 0xFF515780)
{
return MessageDeviceType.Touch;
}
else if ((extra & 0xFF515700) == 0xFF515700)
{
return MessageDeviceType.Pen;
}
else
{
return MessageDeviceType.Mouse;
}
}
internal enum MessageDeviceType
{
Mouse,
Touch,
Pen
}
[STAThreadAttribute()]
public static void Main()
{
Application.EnableVisualStyles();
Application.Run(new EditingDemo());
}
}
}
Imports System.Collections.Generic
Imports System.Drawing
Imports System.Linq
Imports System.Runtime.InteropServices
Imports System.Text
Imports System.Windows.Forms
Imports GrapeCity.Win.CalendarGrid
Namespace CalendarGridSampleCode
Public Class EditingDemo
Inherits Form
Private gcCalendarGrid As New GcCalendarGrid()
Public Sub New()
Me.Text = "Editing Demo"
Me.Size = New Size(800, 700)
Me.StartPosition = FormStartPosition.CenterScreen
gcCalendarGrid.Template = Me.CreateTemplate()
AddHandler gcCalendarGrid.CellContentButtonClick, AddressOf gcCalendarGrid_CellContentButtonClick
AddHandler gcCalendarGrid.CellEditingValueChanged, AddressOf gcCalendarGrid_CellEditingValueChanged
AddHandler gcCalendarGrid.CellBeginEdit, AddressOf gcCalendarGrid_CellBeginEdit
AddHandler gcCalendarGrid.CellEndEdit, AddressOf gcCalendarGrid_CellEndEdit
AddHandler gcCalendarGrid.CurrentCellPositionChanging, AddressOf gcCalendarGrid_CurrentCellPositionChanging
AddHandler Me.Load, AddressOf EditingDemo_Load
' Add GcCalendarGrid to form
Me.gcCalendarGrid.Dock = DockStyle.Fill
Me.Controls.Add(Me.gcCalendarGrid)
End Sub
Private Sub gcCalendarGrid_CellEditingValueChanged(sender As Object, e As CalendarCellEditingValueChangedEventArgs)
'This is a CheckBoxCell
If e.CellPosition.Scope = CalendarTableScope.Content AndAlso e.CellPosition.RowIndex = 2 AndAlso e.CellPosition.ColumnIndex = 1 Then
If Object.Equals(e.Value, True) Then
Me.gcCalendarGrid(e.CellPosition.[Date])(2, 0).Value = "True"
Me.gcCalendarGrid(e.CellPosition.[Date])(2, 0).CellStyle.BackColor = Color.Lime
Else
Me.gcCalendarGrid(e.CellPosition.[Date])(2, 0).Value = "False"
Me.gcCalendarGrid(e.CellPosition.[Date])(2, 0).CellStyle.BackColor = Color.Red
End If
End If
End Sub
Private Sub gcCalendarGrid_CellContentButtonClick(sender As Object, e As CalendarCellEventArgs)
'This is a button cell
If e.CellPosition.Scope = CalendarTableScope.Content AndAlso e.CellPosition.RowIndex = 1 AndAlso e.CellPosition.ColumnIndex = 1 Then
Dim prevCell As New CalendarCellPosition(e.CellPosition.[Date], 1, 0)
Me.gcCalendarGrid.BeginEdit(False)
End If
End Sub
Private Sub gcCalendarGrid_CellBeginEdit(sender As Object, e As CalendarCellBeginEditEventArgs)
If GetMessageDeviceType() = MessageDeviceType.Touch AndAlso (e.CellPosition.Scope = CalendarTableScope.Content AndAlso e.CellPosition.RowIndex = 1 AndAlso e.CellPosition.ColumnIndex = 0) Then
gcCalendarGrid.ShowTouchKeyboard()
End If
End Sub
Private Sub gcCalendarGrid_CellEndEdit(sender As Object, e As CalendarCellEndEditEventArgs)
gcCalendarGrid.HideTouchKeyboard()
End Sub
Private Sub gcCalendarGrid_CurrentCellPositionChanging(sender As Object, e As CalendarCellPositionChangingEventArgs)
If e.NewCellPosition.Scope = CalendarTableScope.Content AndAlso e.NewCellPosition.RowIndex = 1 AndAlso e.NewCellPosition.ColumnIndex = 1 Then
e.NewCellPosition = New CalendarCellPosition(e.NewCellPosition.[Date], 1, 0)
End If
End Sub
Private Sub EditingDemo_Load(sender As Object, e As EventArgs)
For i As Integer = 0 To Me.gcCalendarGrid.LayoutSettings.HorizontalLayoutInfo.Count - 1
Me.gcCalendarGrid.LayoutSettings.PerformHorizontalAutoFit(i)
Next
End Sub
Private Function CreateTemplate() As CalendarTemplate
Dim calendarTemplate1 As New GrapeCity.Win.CalendarGrid.CalendarTemplate()
Dim calendarHeaderCellType1 As New GrapeCity.Win.CalendarGrid.CalendarHeaderCellType()
Dim calendarHeaderCellType2 As New GrapeCity.Win.CalendarGrid.CalendarHeaderCellType()
Dim calendarButtonCellType1 As New GrapeCity.Win.CalendarGrid.CalendarButtonCellType()
Dim calendarCheckBoxCellType1 As New GrapeCity.Win.CalendarGrid.CalendarCheckBoxCellType()
calendarTemplate1.ColumnCount = 2
calendarTemplate1.RowCount = 3
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).RowSpan = 1
calendarTemplate1.ColumnHeader.GetCell(0, 0).ColumnSpan = 2
calendarTemplate1.ColumnHeader.GetCell(0, 0).CellStyle.Alignment = GrapeCity.Win.CalendarGrid.CalendarGridContentAlignment.MiddleCenter
calendarHeaderCellType2.SupportLocalization = True
calendarTemplate1.ColumnHeader.GetCell(0, 1).CellType = calendarHeaderCellType2
calendarTemplate1.Content.CellStyleName = "defaultStyle"
calendarTemplate1.Content.GetColumn(1).Width = 145
calendarTemplate1.Content.GetRow(1).Height = 28
calendarTemplate1.Content.GetRow(2).Height = 28
calendarTemplate1.Content.GetCell(0, 0).DateFormat = "d日"
calendarTemplate1.Content.GetCell(0, 0).DateFormatType = GrapeCity.Win.CalendarGrid.CalendarDateFormatType.DotNet
calendarTemplate1.Content.GetCell(0, 0).RowSpan = 1
calendarTemplate1.Content.GetCell(0, 0).ColumnSpan = 2
calendarButtonCellType1.SupportLocalization = True
calendarTemplate1.Content.GetCell(1, 1).CellType = calendarButtonCellType1
calendarTemplate1.Content.GetCell(1, 1).Value = "Click/Tap To Edit Cell"
calendarTemplate1.Content.GetCell(1, 1).CellStyle.Alignment = GrapeCity.Win.CalendarGrid.CalendarGridContentAlignment.MiddleCenter
calendarCheckBoxCellType1.SupportLocalization = True
calendarTemplate1.Content.GetCell(2, 1).CellType = calendarCheckBoxCellType1
Return calendarTemplate1
End Function
' Mouse event is from touch or not.
<DllImport("user32.dll")> _
Private Shared Function GetMessageExtraInfo() As UInteger
End Function
Private Shared Function GetMessageDeviceType() As MessageDeviceType
Dim extra As UInteger = GetMessageExtraInfo()
If (extra And &HFF515780UI) = &HFF515780UI Then
Return MessageDeviceType.Touch
ElseIf (extra And &HFF515700UI) = &HFF515700UI Then
Return MessageDeviceType.Pen
Else
Return MessageDeviceType.Mouse
End If
End Function
Friend Enum MessageDeviceType
Mouse
Touch
Pen
End Enum
<STAThreadAttribute> _
Public Shared Sub Main()
Application.EnableVisualStyles()
Application.Run(New EditingDemo())
End Sub
End Class
End Namespace