在Devexpress的LookupEdit上显示多个列

时间:2012-12-06 21:51:08

标签: c# winforms devexpress

我有DataSource绑定到LookUpEdit。例如,我有2列FirstNameLastName,我想将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"));                
 }

这就是我的数据源的样子:datasource

4 个答案:

答案 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;
        }
    }