2010-08-12 58 views
0

上个月,我有一个for循环,检查一些复选框是否被检查获取的选中的复选框

foreach (CheckBox chk in this.Controls.OfType<CheckBox>()) 
{ 
    if (chk.Checked) 
    { 
     //Some code here 
    } 
} 

有12个复选框,1各月。

我想要的是计算变量StartDate和上个月之间的天数。很难解释对不起。

例如,StartDate = 1st September 2010,Checked Boxes是四月,十月和十二月。

结果应该是01/09/2010和01/04/2011之间的时间。

如果StartDate = 2010年11月1日,那么结果将是01/11/2010和01/10/2011之间的日期。

我觉得我挣扎着,因为循环从1月到12月。如果它是从startdate月开始的,我会没事的。

请问一些问题,如果我需要解释更多。

+0

我不明白你如何在2个日期之间选择2个月以上吗? – w69rdy 2010-08-12 10:09:32

+0

如果我理解正确:从开始日期开始,我会记录一个日历,经历几个月 - 可能会进入下一年 - 并且当我在复选框列表中勾选该名称的月份时停止。然后我计算开始日期和当月之间的天数。问题:如果那是真的,我理解你的第一个例子,但不是第二个例子。我希望第二个例子计算2010年11月1日至2011年4月1日的日子(因为也检查了4月份)。请澄清,也许我没有完全理解该算法。 – Manfred 2010-08-12 10:17:36

+0

对不起,我无法解释清楚。在第二个例子中,我应该从startdate到10月,因为oct是在4月之后但是在nov之前(startdate)。希望这更清楚。 – 2010-08-12 10:22:42

回答

1

假设你是olny感兴趣的日期时间逻辑,这应该这样做:

private static TimeSpan GetLatestSpan(IEnumerable<int> monthNumbers, DateTime startDate) 
{ 
    var candidateDates = monthNumbers 
        .Select(month => GetNearestDateInDifferentMonthWithSameDay(startDate, month)); 

    return candidateDates.Max() - startDate; 
} 

private static DateTime GetNearestDateInDifferentMonthWithSameDay(DateTime startDate, int month) 
{ 
return new DateTime(month > startDate.Month ? startDate.Year : startDate.Year + 1, month, startDate.Day); 
} 

使用你的榜样,

var checkedMonthNumbers = new List<int>(); 

foreach (CheckBox chk in this.Controls.OfType<CheckBox>()) 
     { 
     if (chk.Checked) 
       { 
        checkedMonthNumbers.Add(GetMonthNumberFromCheckBox(chk)); 
       } 
     } 

MessageBox.Show("Required timespan is " + GetLatestSpan(checkedMonthNumbers, StartDate)); 

编辑:

请注意,我可能会重写环路:

var checkedMonthNumbers = Controls.OfType<CheckBox>() 
            .Where(chk => ck.Checked) 
            .Select(chk => GetMonthNumberFromCheckBox(chk)); 
0
int num=0,currentyear=2010; 
for(i=startmonth;i<endmonth;i++) 
{ 
if(i=13) 
{ 
i=1; 
currentyear++ 
} 
num+=datetime.daysinmonth(currentyear,i); 
} 

我认为它会为你工作

+0

我知道如何计算月份之间的差异。问题在于确定哪个是最后一个月。 – 2010-08-12 12:52:45

0
  • 搜索个月前到的startDate的 最近所选个月。所以基本上只搜索前几个月。

  • 如果没有,请从列表中选择上个月的 。