1

毎月異なるテキストボックスに12回実行したいコードブロックがあります。

これは、行フィルターを使用して月を照合し(月の名前ではなく、上限と下限の範囲を使用してのみ機能します)、エントリの数をカウントします。

// 2月の例:

        DataView dvfeb = new DataView();
        dvfeb = DtSet.Tables[0].DefaultView;
        dvfeb.RowFilter = "([Actual Start Date]>= '1/02/2012' and [Actual Start Date] < '28/02/2012')";
        int febval = dvfeb.Count;
        febbox.Text = febval.ToString();

//3月の例

        DataView dvmar = new DataView();
        dvmar = DtSet.Tables[0].DefaultView;
        dvmar.RowFilter = "([Actual Start Date]>= '1/03/2012' and [Actual Start Date] < '30/03/2012')";
        int marval = dvmar.Count;
        marbox.Text = marval.ToString();

2月、3月、4月のデータビュー名とテキストボックスを自動的に変更するにはどうすればよいですか?また、このループにも含めることができるように、より使いやすい行フィルターはありますか?

例を挙げていただけますか?

4

2 に答える 2

1

これを行うには、検索を使用してコントロールを検索します。以下のコードを試してください。12個のテキストボックスがJanbox、Febbox、Marbox、....大文字と小文字を区別しない(月の最初の3文字+ボックス)と仮定します。

        for (int i = 1; i <= 12; i++)
        {
            DateTime startDate = new DateTime(DateTime.Now.Year, i, 1);
            DateTime endDate;
            if (i < 12)
            {
                endDate = (new DateTime(DateTime.Now.Year, i + 1, 1)).AddDays(-1);
            }
            else
            {
                endDate = (new DateTime(DateTime.Now.Year + 1, 1, 1)).AddDays(-1);
            }
            Debug.WriteLine(startDate.ToString() + " " + endDate.ToString());

            DataView dv = new DataView();
            dv = DtSet.Tables[0].DefaultView;

            string filter = "([Actual Start Date]>= '{0}' and [Actual Start Date] < '{1}')";
            filter = string.Format(filter, startDate.ToString("dd/MM/yyyy"), endDate.ToString("dd/MM/yyyy"));
            dv.RowFilter = filter;

            int val = dv.Count;

            string controlName = startDate.ToString("MMMM");
            controlName = controlName.Substring(0, 3).ToLower() + "box";
            Control[] cs = this.Controls.Find(controlName, true);
            if (cs != null && cs.Length > 0)
            {
                // assume the textbox exist and unique
                TextBox txtbox = (TextBox)(cs[0]);
                txtbox.Text = val.ToString();
            }

        }
于 2012-12-11T21:27:18.637 に答える
1

よくわかりませんが、月番号だけ確認できませんか?

var monthNumber = monthMap[txtbox];
rowfilter = 'actualstartdatemonth = ' + monthNumber;
txtbox.Text = ++currentMonthCountMap[monthNumber];

ここで、yourmonthMapはテキストボックスを月番号にマップするcurrentMonthCountMap辞書であり、カウントを格納する辞書です。

完全な日付が必要な場合は、このSOの質問に従って、次のようにすることができます。

DateTime.DaysInMonth(DateTime.Now.Year, monthNumber);
于 2012-12-11T20:19:49.680 に答える