使 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 中选择 Date
的 29/8/2013
时,ComboBox 2 自动从选中的 Date
中选择第二天 30/8/2013
在 ComboBox 1 中,和/或 ComboBox 2 中的前一个日期将无法单击或阻止(因为 ComboBox 1 作为开始日期是选择 29/8/2013
的 Date
,因此 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 相同的值的主要内容,如果未能解决你的问题,请参考以下文章
如何根据第一个 GridViewComboBoxColumn 的选择填充第二个列