使 ComboBox 2 不选择与 ComboBox 1 相同的值

Posted

技术标签:

【中文标题】使 ComboBox 2 不选择与 ComboBox 1 相同的值【英文标题】:Make ComboBox 2 not select a same value with ComboBox 1 【发布时间】:2013-09-23 12:34:05 【问题描述】:

我有一个问题。这个问题出现在我的脑海中,但我不知道该怎么做。 我有 2 个 ComboBoxes,每个 ComboBox 存储一个 Date,当用户运行程序并在 ComboBox 1 中选择 Date29/8/2013 时,ComboBox 2 自动从选中的 Date 中选择第二天 30/8/2013在 ComboBox 1 中,和/或 ComboBox 2 中的前一个日期将无法单击或阻止(因为 ComboBox 1 作为开始日期是选择 29/8/2013Date,因此 29/8/2013 的前一个日期将不可用点击或阻止)

我该怎么做?

截图如下:

在上面的屏幕截图中,我从 ComboBox 1 中选择日期 9/30/2013 作为开始日期。并且 ComboBox 2 应该自动选择 9/30/2013 的下一天,因此假设选择 10/01/2013 并且来自 9/30/2013 的上一个日期将被阻止或无法被用户在 ComboBox 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;
                
            
        
    

【问题讨论】:

如何填充 combobox1 ? +1 表示好的逻辑问题 hai,我将在问题中发布代码。很抱歉没有早点发布 【参考方案1】:

StartDateCollection的更改事件中填充EndDateCollection

这只会将允许的值填充到EndDateCollection 组合框

private void StartDateCollection_SelectedIndexChanged(object sender, EventArgs e)

    // Clear the items in EndDateCollection

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

根据您的编辑,我建议从数据库中获取最大结束日期,然后填写截至该日期的日期。还要添加检查以确保您尚未达到EndDateCollection 中的最大日期

【讨论】:

【参考方案2】:

获取第一个组合框值

示例:2013 年 9 月 30 日

使用第一个组合框值添加一天

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

现在dt 的值为 1/10/2013

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

它就像一个键,你需要一些日期时间格式。自己动手。

【讨论】:

【参考方案3】:

我认为这不是正确的方法,也许,如果您将逻辑放在 Combobox1_SelectedIndexChanged(object sebder, EventArgs e) 上,您可以在第二个组合框中单击所选日期字符串只是比它高的日期。

希望它能给你一个关注的方式

再见

【讨论】:

以上是关于使 ComboBox 2 不选择与 ComboBox 1 相同的值的主要内容,如果未能解决你的问题,请参考以下文章

Dojo:dojo onblur 事件

C#,comboBox ,怎么使某一项不能被选中

qt中控件的使用函数

如何根据第一个 GridViewComboBoxColumn 的选择填充第二个列

如何在 MFC C++ 中将 CString 值列表添加到 ComboBox 中? [关闭]

如何使 ComboBox 在 .NET 中不可编辑?