4

現在、スケジューラ コントロールを使用して、スケジュールされた予定データをアプリケーション内の SQL データベースから保存および復元しています。スケジューラ コントロール自体は、次のようにいくつかのカスタム フィールドを使用するように構成されています。

private DevExpress.XtraScheduler.SchedulerControl _SchedulerControl;
private DevExpress.XtraScheduler.SchedulerControl StandingSchedulerControl
{
    get
    {
        if (_SchedulerControl == null)
        {
            _SchedulerControl = new DevExpress.XtraScheduler.SchedulerControl();

            BindingSource bs = new BindingSource();
            bs.DataSource = StandingOrderList;

            _SchedulerControl.Storage = new SchedulerStorage(this.components);
            _SchedulerControl.Storage.Appointments.AutoReload = true;
            _SchedulerControl.Storage.Appointments.Mappings.Subject = "Description";
            _SchedulerControl.Storage.Appointments.Mappings.RecurrenceInfo = "RecurrenceInfo";
            _SchedulerControl.Storage.Appointments.Mappings.Type = "Type";

            _SchedulerControl.Storage.Appointments.CustomFieldMappings.Add(new DevExpress.XtraScheduler.AppointmentCustomFieldMapping("Inactive", "Inactive"));
            _SchedulerControl.Storage.Appointments.CustomFieldMappings.Add(new DevExpress.XtraScheduler.AppointmentCustomFieldMapping("StandingOrderKEY", "StandingOrderKEY"));
            _SchedulerControl.Storage.Appointments.DataSource = bs;
            _SchedulerControl.EditRecurrentAppointmentFormShowing += new EditRecurrentAppointmentFormEventHandler(_SchedulerControl_EditRecurrentAppointmentFormShowing);
        }
        return _SchedulerControl;
    }
}

ここで、「StandingOrderList」は StandingOrder ビジネス オブジェクトのリストとして定義されます。これは正しく保存および復元されますが、アプリケーション内で「StandingOrderKEY」の値しか持たない可能性があり、この値からストレージ内の Appointment オブジェクトを取得する必要があります。今まで、私の解決策はこれでした:

private Appointment GetAppointmentByStandingOrderKEY(Guid standingOrderKEY)
{
    Appointment findAppointment = StandingSchedulerControl.Storage.Appointments.Items.Find(appointment => (Guid)appointment.CustomFields["StandingOrderKEY"] == standingOrderKEY);
    return findAppointment;
}

ただし、StandingSchedulerControl.Storage.Appointments.Items には、Normal または Pattern のタイプを持つ Appointments のみが含まれているようです。つまり、StandingOrderKEY が保存された ChangedOccurrence または DeletedOccurrence に関連付けられている場合、関連する予定は見つかりません。

実際、リストから作成された BindingSource にすべての予定の例外が含まれていることを確認しました。AppointmentStorage の DataSource として設定されている場合、例外はパターン アポイントの「内」に格納され、最初に親アポイントへの参照を取得してから、そのアポイントで GetExceptions() を呼び出し、 StandingOrderKEY の結果のコレクション。ただし、これは問題です。現在、「親」予定の識別情報はなく、例外の情報しかありません。

したがって、私の質問は次のとおりです(おおむね好ましい順で):

  • 予定のタイプを無視して、カスタム フィールドの値によって予定ストレージから予定オブジェクトを取得する方法はありますか? 例外と通常/パターンの予定の両方を含むコレクションはありますか?
  • 予定の Type は既に保存されているため、予定が例外になることは事前にわかっています。この特定のカスタム フィールド値のすべての例外を検索する方法はありますか?
  • データソース参照によって Appointment ストレージから Appointment オブジェクトを取得する方法はありますか? DataSource として使用される BindingSource には、例外予定が含まれています。BindingSource コレクション内のアイテムをストレージ内のアイテムに関連付ける方法はありますか?

他の提案は大歓迎です。ご清聴ありがとうございました!

4

2 に答える 2

0

私がたどり着いた最終的な解決策は、次の DevExpress ソリューションに見られるように、予定に対するスタンディング オーダー オブジェクトの独自のマッピングを維持することでした: http://www.devexpress.com/Support/Center/p/E3143.aspx

これにより、上記の質問 3 のように、ソース オブジェクトから予定オブジェクトを取得できました。

于 2012-06-22T14:16:07.053 に答える