2013-09-23 42 views
1

我有一个问题。这个问题出现在我的脑海里,但我不知道该怎么做。 我有一个2个组合框,每个组合框商店Date,并且当用户运行该程序和用户在组合框1选择的29/8/2013一个Date,自动组合框2从在组合框1中选择的Date选择30/8/2013第二天,和/或以前的日期在组合框2将不可用点击或阻塞(因为组合框1为起始日期是选择的29/8/2013Date,所以29/8/2013以前的日期将不会提供给点击或阻塞)使组合框2不能选择与ComboBox相同的值1

我该怎么做呢?

这里是截图:

enter image description here

在上面的截图,i。从组合框1作为开始日期选择日期9/30/2013。并且ComboBox 2应自动选择9/30/2013的第二天,因此它假设选择10/01/2013,并且从9/30/2013开始的前一个日期将被阻止或无法在组合框2中作为结束日期由用户点击。

我很感谢你的回答。 非常感谢!

下面是代码:

public partial class Trans : Form 
    { 
     private List<DateTime> _startDate = new List<DateTime>(); 
     private List<DateTime> _endDate = new List<DateTime>(); 

     public Trans() 
     { 
      InitializeComponent(); 
     } 

     public Trans(Choices _choice) 
      : this() 
     { 
      this._choice = _choice; 
     } 

     private void Trans_Load(object sender, EventArgs e) 
     { 
      for (int i = 0; i < DateTime.Today.AddYears(1).Subtract(DateTime.Today).TotalDays + 1; i++) 
      { 
       _startDate.Add(DateTime.Today.AddDays(i)); 
      } 

      for (int i = 0; i < DateTime.Today.AddYears(1).Subtract(DateTime.Today).TotalDays + 1; i++) 
      { 
       _endDate.Add(DateTime.Today.AddDays(i)); 
      } 

      StartDateCollection(sender, e); 
      EndDateCollection(sender, e); 
     } 

     private void StartDateCollection(object sender, EventArgs e) 
     { 
      using (OleDbConnection conn = new OleDbConnection(connectionString)) 
      { 
       string query = "SELECT [Dates] FROM [TransRecord]"; 

       conn.Open(); 

       using (OleDbDataAdapter _adapter = new OleDbDataAdapter(query, conn)) 
       { 
        comboBox1.DataSource = _startDate; 
        comboBox1.FormatString = "M/dd/yyyy"; 
        comboBox1.FormattingEnabled = true; 
       } 
      } 
     } 

     private void EndDateCollection(object sender, EventArgs e) 
     { 
      using (OleDbConnection conn = new OleDbConnection(connectionString)) 
      { 
       string query = "SELECT [Dates] FROM [TransRecord]"; 

       conn.Open(); 

       using (OleDbDataAdapter _adapter = new OleDbDataAdapter(query, conn)) 
       { 
        comboBox2.DataSource = _endDate; 
        comboBox2.FormatString = "M/dd/yyyy"; 
        comboBox2.FormattingEnabled = true; 
       } 
      } 
     } 
    } 
} 
+0

你怎么填充combobox1? – 4dmonster

+0

+1为良好的逻辑问题 –

+0

海,我会在问题中发布代码。对不起,不要提前发布 – Kaoru

回答

0

填充EndDateCollectionStartDateCollection

这Change事件将填补只能根据您的编辑

private void StartDateCollection_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // Clear the items in EndDateCollection 

    // Fill EndDateCollection - Start at (StartDateCollection's DateTime).AddDays(1) 
} 

值到EndDateCollection组合框中,我会建议从数据库中获取最大结束日期,然后填写截至该日期的日期。还添加了一个检查,以确保你是不是已经在EndDateCollection

0

获得第一组合框的值最大日期

例如:30/9/2013

添加有一天一号组合框的值

DateTime dt=Convert.ToDateTime("30/9/2013").AddDay(1); 

现在dt值是2013年1月10日

设置combobox selected.item =1/10/2013

这只是一个键,你需要一些日期时间格式。自己做 。

0

我不认为这是正确的方式来做到这一点,也许,如果你把逻辑放在Combobox1_SelectedIndexChanged(object sebder,EventArgs e){}上,选择日期字符串,你可以在第二个点击组合框仅仅是比它更高的日期。

希望它让你一路跟随

再见

相关问题