カレンダーコントロールで、MaxSelectionCountプロパティの設定が反映されない場合がある

文書番号 : 37681     文書種別 : 不具合     登録日 : 2014/11/21     最終更新日 : 2015/05/11
文書を印刷する
対象製品
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));
    }
}

なお、この現象は実行時のユーザー操作による日付選択時には発生しません。
回避方法
この問題は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";