2016-11-12 1 views
2
public static void fill_combo(string table, ComboBox cmb, string columns) 
    { 
     ds = new DataSet(); 
     try 
     { 
      conn.Open(); 

      da = new SqlDataAdapter($"SELECT {columns} FROM [{table}]", conn); 

      da.Fill(ds, table); 
      cmb.DataSource = ds.Tables[table]; 
      cmb.ValueMember = ds.Tables[table].Columns[0].ToString(); 
      cmb.DisplayMember = ds.Tables[table].Columns[1].ToString(); 

      cmb.SelectedItem = null; 
      cmb.Text = "Select..."; 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Error"); 

     } 
     finally 
     { 
      if (conn != null) 
      { 
       conn.Close(); 
      } 
     } 
    } 

안녕하세요. 위의 코드를 사용하여 데이터베이스에서 결과를 가져와 콤보 상자에 바인딩하려고하지만 첫 번째 항목이 데이터베이스에없는 임의의 "선택 ..."이되도록합니다. 미리 감사드립니다.기본 콤보 상자 첫 번째 항목이 데이터베이스 결과와 섞여 있음

+0

이 작업을 수행합니까? cmb.Items.Insert (0, "Select ..."); –

+0

@BenSteele 아니요, DataSource 속성이 설정된 경우 Items 컬렉션을 수정할 수 없습니다. –

답변

1

옵션 1 - 당신은 DataTableDataRow 포함 원하는 값을 삽입 할 수 있습니다

var connection = @"Your Connection String"; 
var command = "SELECT Column1, Column2 FROM Table1"; 
var dt = new DataTable(); 
using (var da = new SqlDataAdapter(command, connection)) 
    da.Fill(dt); 
var row = dt.NewRow(); 
row["Column1"] = DBNull.Value; 
row["Column2"] = "Select an Item"; 
dt.Rows.InsertAt(row, 0); 
this.comboBox1.DataSource = dt; 
this.comboBox1.ValueMember = "Column1"; 
this.comboBox1.DisplayMember = "Column2"; 

옵션 2- 대신의 DataTable에 널 (null) 데이터를 추가, 당신은 DropDownList-DropDownStyle을 설정하고 설정할 수 있습니다 DrawModeOwnerDrawFixed으로 설정하고 DrawItem 이벤트를 처리하고 선택한 인덱스가 -1 일 때 자리 표시자를 그립니다.

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    var combo = sender as ComboBox; 
    var text = "Select an Item"; 
    if (e.Index > -1) 
     text = combo.GetItemText(combo.Items[e.Index]); 
    e.DrawBackground(); 
    TextRenderer.DrawText(e.Graphics, text, combo.Font, 
     e.Bounds, e.ForeColor, TextFormatFlags.Left); 
} 

장소 소유자를 표시하려면 설정하기에 충분합니다. comboBox1.SelectedIndex = -1;

+0

젠장, 정말 고마워. 생명의 은인! –

+0

당신은 환영합니다 :) –