我有DataSource
绑定到LookUpEdit
。例如,我有2列FirstName
和LastName
,我想将DisplayMember
属性设置为这两列。
我发现我应该订阅lookUp_CustomDisplayText()
并编辑显示文本属性,如下所示:
private void lookUpCompanyPerson_CustomDisplayText(object sender, CustomDisplayTextEventArgs e)
{
LookUpEdit edit = sender as LookUpEdit;
if (e.DisplayText != "")
{
e.DisplayText = e.DisplayText + " " + (string)e.Value;
}
}
但我不明白e.Value
是什么,我想显示所选行的另一列,而不是所选行的值成员。
这是我将数据源绑定到lookupedit的方式:
private void populateComboBoxForCompanyPerson()
{
lookUpCompanyPerson.Properties.ForceInitialize();
bs = new BindingSource(myDataSet, "CompanyPerson");
lookUpCompanyPerson.Properties.DataSource = bs;
lookUpCompanyPerson.Properties.DisplayMember = "CompanyName";
lookUpCompanyPerson.Properties.ValueMember = "PersonID";
this.lookUpCompanyPerson.Properties.Columns.Add(new LookUpColumnInfo("PersonID"));
this.lookUpCompanyPerson.Properties.Columns["PersonID"].Visible = false;
this.lookUpCompanyPerson.Properties.Columns.Add(new LookUpColumnInfo("FirstName"));
this.lookUpCompanyPerson.Properties.Columns.Add(new LookUpColumnInfo("LastName"));
this.lookUpCompanyPerson.Properties.Columns.Add(new LookUpColumnInfo("CompanyName"));
}
这就是我的数据源的样子:
答案 0 :(得分:3)
我已经改变了Ian O'Brien的代码并且它有效:
private void lookUpCompanyPerson_CustomDisplayText(object sender, CustomDisplayTextEventArgs e)
{
RepositoryItemLookUpEdit props;
if (sender is LookUpEdit)
props = (sender as LookUpEdit).Properties;
else
props = sender as RepositoryItemLookUpEdit;
if (props != null && (e.Value is int))
{
DataRowView row = props.GetDataSourceRowByKeyValue(e.Value) as DataRowView;
if (row != null)
{
e.DisplayText = String.Format("{0} {1}", row["FirstName"], row["LastName"]);
}
}
}
答案 1 :(得分:1)
来自DevExpress文档:
e.Value
获取或设置编辑器的当前值。e.DisplayText
获取或设置编辑的显示文字查找编辑器的值是从RepositoryItemLookUpEditBase.ValueMember属性指定的数据源字段获取的。 GetDataSourceRowByKeyValue方法在此字段中搜索指定的值,并返回表示第一个找到的记录的对象。
GetDataSourceRowByKeyValue方法的返回值取决于底层数据源的类型。如果数据源是System.Data.DataTable或System.Data.DataView,则此方法返回System.Data.DataRowView对象。如果数据源是项目的自定义列表,则返回相应的列表项。
您希望将e.Value
设置为要在控件中显示的值。
private void lookUpCompanyPerson_CustomDisplayText(object sender, CustomDisplayTextEventArgs e)
{
RepositoryItemLookUpEdit props
if (sender is LookUpEdit)
props = (sender as LookUpEdit).Properties;
else
props = sender as RepositoryItemLookUpEdit;
if (props != null && (e.Value is int))
{
object row = props.GetDataSourceRowByKeyValue(e.Value);
if (row != null)
{
e.Value = String.Format("{0} {1}", (DataRowView)row["FirstName"], (DataRowView)row["LastName"]);
e.Handled = true;
}
}
}
最后,这里有一些包含更多文档的有用页面:
答案 2 :(得分:1)
我使用它,就像这样;
cmb_tip.Properties.DataSource = _dt;
cmb_tip.Properties.ValueMember = "Value";
cmb_tip.Properties.DisplayMember = "Type";
cmb_tip.Properties.PopulateColumns();
cmb_tip.Properties.Columns["Value"].Visible = false;
答案 3 :(得分:0)
这是它与版本15.2.7中的LookupEditControl和类:
一起使用的方式private void lookUpEditPatients_CustomDisplayText(object sender, DevExpress.XtraEditors.Controls.CustomDisplayTextEventArgs e)
{
var edit = sender as LookUpEdit;
var props = edit.Properties;
var pat = (Patients4ComboBoxVm) props?.GetDataSourceRowByKeyValue(e.Value);
if (pat != null)
{
e.DisplayText = pat.Nachname + ", " + pat.Vorname + "; " + pat.Geburtsdatum + "; " + pat.Versicherungsnummer;
}
}