2

私は にDataSourceバインドしていLookUpEditます。たとえば、 2 つの列がFirstNameあり、これら 2 つの列にプロパティを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"));                
 }

そして、これは私のデータソースがどのように見えるかです:情報源

4

4 に答える 4

4

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"]);

          }
      }
}
于 2012-12-07T16:32:59.810 に答える
2

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

最後に、より多くのドキュメントを含むいくつかの便利なページを次に示します。

于 2012-12-07T16:10:45.190 に答える
1

これは、バージョン 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;
        }
    }
于 2016-11-03T11:05:58.087 に答える
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;
于 2013-03-06T14:49:43.883 に答える