1

コンボボックスに列を表示するには、Desingner of Form でこの文字列を担当すると思います:

this.ComboBox1.DisplayMember = "name";

しかし、「名前」の近くに何かを追加することはできません。すべての文字列にコンボボックスが表示されます:System.Data.DataRowView

多分それは間違っている、どうすればいいのか教えてください。

データ ソースからテーブルをコンボボックスとしてドラッグするだけです。

フォームの読み込み時:

private void frmCheck_Load(object sender, EventArgs e)
{        
 this.ttzTableAdapter.Fill(this.dbDataSet.ttz, Convert.ToInt32(idFromWork.Text));
}

コンボボックスは、リストに「名前」だけを表示します。リストに「番号」と「名前」を表示するようにします。

"Convert.ToInt32(idFromWork.Text)" 

id_ttz(ID) = @idwork のショー名のパラメーター

4

4 に答える 4

2

DisplayMemberDataSource プロパティで指定されたコレクションに含まれるオブジェクト プロパティの名前を指定する文字列です。表示するプロパティを複数指定することはできません。これを行おうとすると、「複合プロパティ」が見つからず、ToString()実装によってオブジェクトが表示されます (System.Data.DataRowView文字列が表示されるのはそのためです)。

オブジェクトの複数のプロパティを表示する必要がある場合は、カスタムの複数列コンボ ボックスを作成し、そのポップアップを ListView または DataGridView として実装できます。

更新: DataView の DataTable に直接バインドする代わりに、表示用に書式設定されたテキストを提供する独自の匿名型を作成できます。

ComboBox1.DataSource = tdbDataSet.ttz.AsEnumerable()
          .Select(row => new 
               { 
                 Text = String.Format("{0,5} | {1}", row["id_ttz"], row["name"]),
                 Value = row["id_ttz"]
               })
         .ToList();

ComboBox1.DisplayMember = "Text";
ComboBox1.ValueMember = "Value";
于 2012-06-09T14:44:10.533 に答える
2

コンボボックスに 2 つの列を追加することはできません。2 つのオブジェクトの値をどのように連結できるか。複数の列 (C#) を持つこのWinForms コンボボックスを参照してください。

于 2012-06-09T14:48:57.387 に答える
1

クエリに計算列を追加します

  select name, ..., name+' '+number as colToDisplay...

そして、このように使用します

   this.ComboBox1.DisplayMember = "colToDisplay";

または、コンボをにバインドしている場合custom object

表示する必要がある列を組み合わせた新しいプロパティを追加します

 public string PropertyToShow
 {
   get{return name+" "+otherProp;}
 } 
于 2012-06-09T14:46:40.173 に答える
0

いくつかの可能性があります。を指定しない場合DisplayMember、コンボ ボックスはToStringメソッドを使用して文字列を取得します。ToStringしたがって、クラスの制御下にある場合、クラスのメソッドをオーバーライドすることは当然のことです。または、適切な文字列を返すプロパティを追加して、これを で使用することもできますDisplayMember

から派生させて独自のコンボ ボックスを作成するのは、まったく別の方法ですComboBox。次に、アイテムの高さがすべて同じか、高さが異なる可能性がある場合にDrawMode、コンボ ボックスの を変更します。独自の描画ロジックをオーバーライドして実行する必要があります。指定した場合は、各項目のコンボ ボックスの高さを伝えるためにもオーバーライドする必要があります。OwnerDrawFixedOwnerDrawVariableOnDrawItemOwnerDrawVariableOnMeasureItem

この 2 番目のアプローチを使用すると、実際の列を作成したり、垂直セパレーターを描画したり、その他多くのことを行うことができます。さまざまな背景とテキストの色、さまざまなフォントなどを使用してアイコンを描画できます。

于 2012-06-09T14:55:15.787 に答える