我正在为这个惊人的问题撕掉我的头发。
我从代码中绑定了2个LookUpEdit:
MyBinding.DataSource = typeof(MyObject);
MyBinding.DataSource = _dataObject.GetMyList();
firstLookUp.DataBindings.Add("EditValue", MyBinding, "Code");
firstLookUp.Properties.DataSource = MyBinding;
firstLookUp.Properties.ValueMember = "Code";
firstLookUp.Properties.DisplayMember = "Code";
secondLookUp.DataBindings.Add("EditValue", MyBinding, "Info");
secondLookUp.Properties.DataSource = MyBinding;
secondLookUp.Properties.ValueMember = "Info";
secondLookUp.Properties.DisplayMember = "Info";
第一个问题是:更改两个LookUps中的一个不反映更改另一个的值!但即时使用相同的BindingSource,位置是否相同?
另一个是:他们都自动填充列,我不想显示所有列,尝试删除,找不到异常列,如果我添加,我得到重复列! 我不明白!!!
答案 0 :(得分:1)
更改LookupEdit的EditValue不直接绑定到BindingSource.Current位置。
你必须使用像
这样的东西lookUpEdit1.Properties.GetDataSourceRowByKeyValue(lookUpEdit1.EditValue)
如果你想连接两个LookupEdits,你可能最好在另一个被改变时设置一个的编辑值。
其次你应该能够像这样清除列的列表:
lookUpEdit1.Properties.Columns.Clear();
lookUpEdit1.Properties.Columns.Add(new LookUpColumnInfo("FirstName"));
答案 1 :(得分:1)
如上所述
http://www.devexpress.com/Support/Center/p/B138420.aspx
http://www.devexpress.com/Support/Center/p/A2275.aspx
LookupEdit确实更新了BindingSource的Current属性。
我们使用以下代码作为解决方法:
/// <summary>
/// Wrapper around DevExpress.XtraEditors.LookUpEdit to fix bug with adjusting the BindingSources Current Position
/// </summary>
public sealed class LookUpEditWithDataSource : LookUpEdit
{
private bool firstCall = true;
/// <summary>
/// Called when the edit value changes.
/// </summary>
protected override void OnEditValueChanged()
{
base.OnEditValueChanged();
if (this.Properties.DataSource == null)
{
return;
}
if (this.BindingContext == null)
{
return;
}
if (this.firstCall)
{
this.firstCall = false;
// HACK
// starting and selecting the first item
// doesn't work so we change the position to the first item
this.BindingContext[this.Properties.DataSource].Position = 1;
}
this.BindingContext[this.Properties.DataSource].Position = this.Properties.GetDataSourceRowIndex(this.Properties.ValueMember, this.EditValue);
}
}