我有一个包含组合框的用户控件。所有组合框都直接绑定到相同的数据表,用户控件创建大约10次。我的问题是,用户可以从其他组合框中的组合框中选择相同的值。例如,他们会选择“测试”。在第一个组合中,在第二个组合中,我需要测试'不是一个可用的选择。因此,每个组合框只能包含一个可用选项。
我知道我需要将逻辑应用于Combo的ValueChanged事件,但不确定如何根据所选内容限制选项。
感谢您的帮助
答案 0 :(得分:0)
从数据表中删除所选行,并将其绑定到第一个组合框ChangedEvent上的第二个组合框。
我们说你的数据表是dtTable,然后是
LocalTime start = LocalTime.parse("19:00");
LocalTime end = LocalTime.parse("17:10");
Duration elapsed = Duration.between(start, end);
System.out.println(elapsed.toMinutes());
现在将dtTable绑定到comboBox 2
答案 1 :(得分:0)
如果您在问题中共享了一些代码,那会有所帮助。然而,这里有一些快速和肮脏的东西可能有所帮助。当然,这可以更好地实现跨越式发展,但正如我所说,这是快速和肮脏的。
在控件中:
public partial class ComboBoxControl : UserControl, INotifyPropertyChanged
{
public ComboBoxControl()
{
InitializeComponent();
}
public string LabelText
{
get;
set;
}
private string _dataBindingFilter;
public string DataBindingFilter
{
get
{
return _dataBindingFilter;
}
set
{
if (value != _dataBindingFilter)
{
_dataBindingFilter = value;
NotifyPropertyChanged("DataBindingFilter");
}
}
}
public DataTable DataSource
{
get;
set;
}
public string DisplayMember
{
get;
set;
}
public string ValueMember
{
get;
set;
}
public ComboBoxControl ChildControl
{
get;
set;
}
public void BindComboBox()
{
comboBox1.SelectedIndexChanged -= new EventHandler(comboBox1_SelectedIndexChanged);
if (string.IsNullOrEmpty(DataBindingFilter))
{
comboBox1.DataSource = DataSource;
}
else
{
DataView view = DataSource.AsDataView();
view.RowFilter = DataBindingFilter;
comboBox1.DataSource = view;
}
comboBox1.DisplayMember = DisplayMember;
comboBox1.ValueMember = ValueMember;
comboBox1.SelectedIndex = -1;
comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (ChildControl != null)
{
ChildControl.DataSource = DataSource;
ChildControl.ValueMember = ValueMember;
ChildControl.DisplayMember = DisplayMember;
ChildControl.DataBindingFilter = ChildControl.ValueMember + "<>" + comboBox1.SelectedValue;
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
BindComboBox();
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
在表单中,假设您有2个控件,则:
comboBoxControl1.DataSource = table;
comboBoxControl1.ValueMember = "Id";
comboBoxControl1.DisplayMember = "Value";
comboBoxControl1.BindComboBox();
comboBoxControl1.ChildControl = comboBoxControl2;
假设您有一个包含数据的表对象。