用1个语句自动输入12个文本框中的数据

时间:2012-12-11 20:00:47

标签: c# visual-studio-2010

我有一个代码块,我希望每个月运行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();

// March Example

        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数据视图名称和文本框?是否有一个更容易使用的行过滤器,所以它也可以包含在这个循环中?

你能举个例子吗?

2 个答案:

答案 0 :(得分:1)

我对此不确定,但你能不能查看月份编号?

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

您的monthMap是将文本框映射到月份编号的字典,currentMonthCountMap是存储您的计数的字典;

如果您想要完整日期,那么每this SO question您可以执行以下操作:

DateTime.DaysInMonth(DateTime.Now.Year, monthNumber);

答案 1 :(得分: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();
            }

        }