我有一个代码块,我希望每个月运行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数据视图名称和文本框?是否有一个更容易使用的行过滤器,所以它也可以包含在这个循环中?
你能举个例子吗?
答案 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();
}
}