1

我有一个代码块,我希望每个月运行 12 次到不同的文本框中。

它所做的是使用行过滤器来匹配月份(我只能使用上下范围而不是月份名称来工作)并计算有多少条目。

//二月示例:

        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();

// 三月示例

        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();

我如何让它自动更改 feb、mar、apr 数据视图名称和文本框?是否有更易于使用的行过滤器,因此它也可以包含在此循环中?

你能举个例子吗?

4

2 回答 2

1

我不确定这一点,但你不能只检查月份数吗?

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

其中 yourmonthMap是将文本框映射到月份数currentMonthCountMap的字典,并且是存储您的计数的字典;

如果您想要完整的日期,那么根据这个 SO question,您可以执行以下操作:

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

您可以通过使用 Find 来查找控件来执行此操作。试试下面的代码。假设 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 回答