カレンダーコントロールで、MaxSelectionCountプロパティの設定が反映されない場合がある
対象製品
InputMan for ASP.NET 7.0J
状況
修正済み
詳細
複数日付の選択が可能なカレンダーコントロールにおいて、VisibleプロパティをFalseに設定している状態のときにサーバー側イベントでMaxSelectionCountプロパティを設定すると、コードからの日付選択が正しく動作しません。
次のようにVisibleプロパティをTrueに切り替え、選択可能な最大日数分の日付をSelectionsプロパティに追加しても、カレンダーコントロールが表示されたときには既定値またはASPXファイルで設定した値が選択状態となります。
【再現コード】
[VisualBasic]
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
' コントロールを非表示にします。
GcCalendar1.Visible = False
' 日付の複数選択を可能にします。
GcCalendar1.SelectionMode = GrapeCity.Web.Input.IMCalendar.SelectionMode.MultiRich
' 選択可能な最大日数を20に設定します。
GcCalendar1.MaxSelectionCount = 20
End If
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' コントロールを表示します。
GcCalendar1.Visible = True
' 最大日数分日付を選択します。
GcCalendar1.Selections.Clear()
For i As Integer = 0 To GcCalendar1.MaxSelectionCount - 1
Dim dt As New GrapeCity.Web.Input.Core.DateTimeEx(New DateTime(2014, 11, 1))
GcCalendar1.Selections.Add(dt.AddDays(i))
Next
End Sub
[C#]
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// コントロールを非表示にします。
GcCalendar1.Visible = false;
// 日付の複数選択を可能にします。
GcCalendar1.SelectionMode = GrapeCity.Web.Input.IMCalendar.SelectionMode.MultiRich;
// 選択可能な最大日数を20に設定します。
GcCalendar1.MaxSelectionCount = 20;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
// コントロールを表示します。
GcCalendar1.Visible = true;
// 最大日数分日付を選択します。
GcCalendar1.Selections.Clear();
for (int i = 0; i < GcCalendar1.MaxSelectionCount; i++)
{
GrapeCity.Web.Input.Core.DateTimeEx dt = new GrapeCity.Web.Input.Core.DateTimeEx(new DateTime(2014, 11, 1));
this.GcCalendar1.Selections.Add(dt.AddDays(i));
}
}
なお、この現象は実行時のユーザー操作による日付選択時には発生しません。
次のようにVisibleプロパティをTrueに切り替え、選択可能な最大日数分の日付をSelectionsプロパティに追加しても、カレンダーコントロールが表示されたときには既定値またはASPXファイルで設定した値が選択状態となります。
【再現コード】
[VisualBasic]
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
' コントロールを非表示にします。
GcCalendar1.Visible = False
' 日付の複数選択を可能にします。
GcCalendar1.SelectionMode = GrapeCity.Web.Input.IMCalendar.SelectionMode.MultiRich
' 選択可能な最大日数を20に設定します。
GcCalendar1.MaxSelectionCount = 20
End If
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' コントロールを表示します。
GcCalendar1.Visible = True
' 最大日数分日付を選択します。
GcCalendar1.Selections.Clear()
For i As Integer = 0 To GcCalendar1.MaxSelectionCount - 1
Dim dt As New GrapeCity.Web.Input.Core.DateTimeEx(New DateTime(2014, 11, 1))
GcCalendar1.Selections.Add(dt.AddDays(i))
Next
End Sub
[C#]
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// コントロールを非表示にします。
GcCalendar1.Visible = false;
// 日付の複数選択を可能にします。
GcCalendar1.SelectionMode = GrapeCity.Web.Input.IMCalendar.SelectionMode.MultiRich;
// 選択可能な最大日数を20に設定します。
GcCalendar1.MaxSelectionCount = 20;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
// コントロールを表示します。
GcCalendar1.Visible = true;
// 最大日数分日付を選択します。
GcCalendar1.Selections.Clear();
for (int i = 0; i < GcCalendar1.MaxSelectionCount; i++)
{
GrapeCity.Web.Input.Core.DateTimeEx dt = new GrapeCity.Web.Input.Core.DateTimeEx(new DateTime(2014, 11, 1));
this.GcCalendar1.Selections.Add(dt.AddDays(i));
}
}
なお、この現象は実行時のユーザー操作による日付選択時には発生しません。
回避方法
この問題はService Pack 4(v7.0.2015.511)で修正されました。
不具合を修正した最新のサービスパックは、アップデートページからダウンロードできます。
Service Pack 4より前のバージョンでは以下の方法で回避可能です。
カレンダーコントロールの表示/非表示をVisibleプロパティではなく、Styleプロパティにdisplay属性を設定することで切り替えます。
[Visual Basic]
' コントロールを非表示にします。
' GcCalendar1.Visible = False
GcCalendar1.Style.Value = "display:none"
' コントロールを表示します。
' GcCalendar1.Visible = True
GcCalendar1.Style.Value = "display:block"
[C#]
// コントロールを非表示にします。
// GcCalendar1.Visible = false;
GcCalendar1.Style.Value = "display:none";
// コントロールを表示します。
// GcCalendar1.Visible = true;
GcCalendar1.Style.Value = "display:block";
不具合を修正した最新のサービスパックは、アップデートページからダウンロードできます。
Service Pack 4より前のバージョンでは以下の方法で回避可能です。
カレンダーコントロールの表示/非表示をVisibleプロパティではなく、Styleプロパティにdisplay属性を設定することで切り替えます。
[Visual Basic]
' コントロールを非表示にします。
' GcCalendar1.Visible = False
GcCalendar1.Style.Value = "display:none"
' コントロールを表示します。
' GcCalendar1.Visible = True
GcCalendar1.Style.Value = "display:block"
[C#]
// コントロールを非表示にします。
// GcCalendar1.Visible = false;
GcCalendar1.Style.Value = "display:none";
// コントロールを表示します。
// GcCalendar1.Visible = true;
GcCalendar1.Style.Value = "display:block";