2016-12-16 4 views
0

私はコンボボックスの一番上の選択肢としてALLオプションを追加する必要があります。私は以下のこのコードを試しましたが、Allは追加されません。追加しなければならないものは何ですか?私はちょうどいない、彼らは、データベースから必要としていくつかのことが私のコードで示す...私の接続文字列は、上記の宣言され、コンボボックスの表示内容はなかった実現Comboboxの1st Selectionとして "ALL"オプションを追加

string query = "select [empname] from [server].[dbo].[table]"; 
SqlDataAdapter da = new SqlDataAdapter(query, conn); 
conn.Open(); 
DataSet ds = new DataSet(); 
da.Fill(ds, "tables"); 
cbotables.DisplayMember = "empname"; 
cbotables.Items.Insert(0, "All"); 
cbotables.DataSource = ds.Tables["tables"]; 

EDIT
ALLオプションが追加されました。

+0

「アイテム」のデータアイテムを手動で使用することはできません – Plutonix

+0

@Plutonix - これには「バンドエイド」がありますか? I.データテーブルにアイテムを追加してからデータテーブルにALLを追加するか、新しいSQLテーブルに項目を挿入してそのリストの一番上にALLを挿入して新しく作成したテーブルからデータを取り出すことができますか? –

+0

*通常、データソースにはvaluememberも必要です(Emp Idなど)。あなたは名前の直後にいるので、なぜデータソースを使用するのですか? addrangeとlinq 1ライナーを使用してアイテムコレクションに名前を追加する – Plutonix

答えて

1

おそらく最も簡単な方法は、その唯一の役割があることをあると仮定しDataTableに行を挿入することですDataSource

// fill the datatable 
dt.Load(cmd.ExecuteReader()); 

var dr = dt.NewRow(); 
dr["Id"] = -1; 
dr["Name"] = "All"; 
dt.Rows.InsertAt(dr, 0); 

cboEmp.DisplayMember = "Name"; 
cboEmp.ValueMember = "Id"; 
cboEmp.DataSource = dt; 

あなたが何だったか言うことができるので、これらとのValueMemberを持つことが一般的ですしたがって、「Id」列が選択される。 DataTableに他の目的がある場合は、偽のデータを追加したくない場合があります。そのため、あなたは匿名のリストにデータを転送できます。

enter image description here

あなたが本当にIdを必要といけない場合、あなたはアノンの種類を必要といけない:

dt.Load(cmd.ExecuteReader()); 

// xfer data to anon collection 
var myDS = dt.AsEnumerable() 
    .Select(q => new {Name = q.Field<String>("Name"), 
         Value = q.Field<Int32>("Id") } 
      ) 
    .ToList(); 

// add ALL with fake id 
myDS.Insert(0, new { Name = "ALL", Value = -1 }); 

cboEmp.DisplayMember = "Name"; 
cboEmp.ValueMember = "Value"; 
cboEmp.DataSource = myDS; 

をどちらの方法でも同じ結果を得ますList<string>

関連する問題