0

誰かにこれについて案内してもらいたいです。コンボボックスから期間を選択するときに、範囲の日付を計算するために、いくつかの aspx ページで同じ方法を使用する必要があります。たとえば、あるページには期間 (今月の売上、先月の売上、昨年の売上、今年の売上) の組み合わせがあり、別のページには期間 (今週の費用、今月の費用など) の組み合わせがあります。日付範囲 (開始日と終了日) を教えてください。ただし、すべてのコンボが同じ期間を持つわけではありません (1 つは月、週、年、もう 1 つは月と年)。ジェネリックにするにはどうすればよいですか?Enumビットフラグまたはユーザーコントロールで考えていました...誰かが私に手を差し伸べることができますか? ありがとう!

4

2 に答える 2

0

必要な作業は次のとおりです。

  1. たとえば、「今月の費用」の「2013-03-01:2013-03-31」のように、コンボボックスのオプションにタイムスタンプ文字列を配置します。今月、先月、今週などの開始と終了を取得する関数が必要になります。以下に例を書きます。
  2. コンボボックスのオプション テキストは同じままにしてください (例: 「今月の費用」)。
  3. コンボボックスのオプション値を読み取り、日付/時刻文字列パーサーを使用して範囲を取得します。

先週、先月などを取得するコードは次のようになります。

public static void GetPeriod(string selected_period, out DateTime start, out DateTime end)
{
    switch (selected_period)
    {
        case "last year":
            start = new DateTime(DateTime.Today.Year - 1, 1, 1);
            end = new DateTime(DateTime.Today.Year, 1, 1);
            break;
        case "this year":
            start = new DateTime(DateTime.Today.Year, 1, 1);
            end = new DateTime(DateTime.Today.Year + 1, 1, 1).AddDays(-1);
            break;
        case "last month":
            start = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(-1);
            end = new DateTime(DateTime.Today.Year + 1, DateTime.Today.Month, 1).AddDays(-1);
            break;
        case "this month":
            start = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);
            end = new DateTime(DateTime.Today.Year + 1, DateTime.Today.Month, 1).AddMonths(1).AddDays(-1);
            break;
        case "last week":
            start = DateTime.Today.AddDays(-7);
            while (start.DayOfWeek != DayOfWeek.Sunday)
                start = start.AddDays(-1);
            end = start.AddDays(6);
            break;
        case "this week":
            start = DateTime.Today;
            while (start.DayOfWeek != DayOfWeek.Sunday)
                start = start.AddDays(-1);
            end = start.AddDays(6);
            break;
    }
}

次に、開始と終了をコンボボックスのオプション値に入れる文字列に変換するだけです。

于 2013-03-27T17:34:32.430 に答える
0

この回答はコメントには少し長すぎるので、別の回答を作成しています。私は RadComboBox を使用していませんが、VS 2010 で独自のカスタム .ascx コントロールを作成しました。次のことを行う必要があります。

  1. .ascx コントロールを作成する
  2. そこに ASP.NET コンボボックス (または RadComboBox) を追加します。
  3. 「年、週、月」など、表示するオプションをリストするコントロール プロパティ (文字列) を作成します。そうすれば、他のコーディングを必要とせずに、HTML のページごとにオプションを変更できます。
  4. .ascx コントロール コードで、#2 のカスタム プロパティに基づいて表示オプションを変更します。
  5. 選択されたオプションに基づいて、期間の開始と終了を取得する関数をコントロールに作成します。

このように、特定のページで行う必要があるのは、カスタム コントロールを挿入し、カスタム プロパティを指定して、必要に応じて GetStart または GetEnd を呼び出すことだけです。他のすべてのコーディングは、コントロール自体で処理されます。RadComboBox でもこれを行うことができると思いますが、私は使用したことがありません。

于 2013-03-27T17:55:10.557 に答える