1

我有个问题。这个问题出现在我的脑海中,但我不知道该怎么做。我有一个 2 ComboBoxes,每个 ComboBox 存储 a Date,当用户运行程序并用户在 ComboBox 1 中选择 aDate时,ComboBox 2 自动从29/8/2013ComboBox 1 中选择的第二天选择,和/或 ComboBox 2 中的上一个日期不会可点击或屏蔽(因为 ComboBox 1 作为开始日期选择的是,所以之前的日期将不可点击或屏蔽)30/8/2013DateDate29/8/201329/8/2013

我怎么做?

这是屏幕截图:

在此处输入图像描述

在上面的屏幕截图中,我9/30/2013从 ComboBox 1 中选择日期作为开始日期。并且 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;
                }
            }
        }
    }
}
4

3 回答 3

0

获取第一个组合框值

示例:2013 年 9 月 30 日

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

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

现在的dt值为 2013年 1 月 10 日

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

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

于 2013-09-23T12:42:43.307 回答
0

EndDateCollection在 Change 事件中填充StartDateCollection

这将仅将允许的值填充到EndDateCollection组合框中

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

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

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

于 2013-09-23T12:40:18.043 回答
0

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

希望它给你一个遵循的方法

再见

于 2013-09-23T12:50:33.737 回答