2012-12-11 41 views
1

我有一個代碼塊,我希望每個月在不同的文本框中運行12次。將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(); 

我將如何得到它改變二月,三月,四月數據視圖自動命名和文本框?是否有更容易使用的行過濾器,因此它可以包含在這個循環中?

您能舉個例子嗎?

回答

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

     } 
+1

如果你想要完整的日期,爲什麼不使用'DateTime.DaysInMonth(Year,Month)'? http://stackoverflow.com/questions/2493032/how-to-get-the-last-day-of-a-month –

+0

謝謝。這是因爲我不知道它存在。 :) – urlreader

1

我不確定這一點,但你不能檢查月份數字嗎?

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

如果您monthMap是文本框映射到一個月數的字典,currentMonthCountMap是存儲您計數的字典;

如果你想完整的日期,然後每this SO question你可以做到以下幾點:

DateTime.DaysInMonth(DateTime.Now.Year, monthNumber); 
相關問題