2017-08-17 18 views
-1

我需要顯示一些數據庫的行,並將它們顯示在組合框中。顯示組合框中的行

我有這段代碼正在工作,但不是顯示正確的行,它只顯示System.Data.DataRow

這裏是我的代碼:

public Form1() 
    { 
     InitializeComponent(); 
     string setting = ConfigurationManager.AppSettings["setting1"]; 
     string conn = ConfigurationManager.ConnectionStrings["test"].ConnectionString; 
     using (SqlConnection sqlConn = new SqlConnection(conn)) 
     { 
      string sqlQuery = @"SELECT CDU_ESTADOS from testetiposdestados"; 
      MessageBox.Show(sqlQuery); 
      SqlCommand cmd = new SqlCommand(sqlQuery, sqlConn); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      DataTable table = new DataTable(); 
      da.Fill(table); 
      comboBox1.DataSource = new BindingSource(table, null); 

     } 

    } 

這裏是組合框中顯示了一個截圖:

enter image description here

這裏組合框中要顯示哪些內容:

enter image description here

如果你hav e有關代碼的任何問題或其他問題隨時問

+5

是否定義組合框ValueMember和DisplayMember? –

+0

我沒有在DataGrindView中做到這一點,它的工作原理 –

+0

ComboBox不是DataGridView。使用數據綁定組合框時,您需要定義DisplayMember和ValueMember。 –

回答

2

您需要設置組合框DisplayMember屬性。 否則,它只是顯示從數據項的ToString()返回的值(在這種情況下,System.Data.DataRow):

combobox1.DisplayMember = "CDU_ESTADOS"; 

就擺在你的代碼的情況下:

public Form1() 
{ 
    InitializeComponent(); 
    string setting = ConfigurationManager.AppSettings["setting1"]; 
    string conn = ConfigurationManager.ConnectionStrings["test"].ConnectionString; 
    using (SqlConnection sqlConn = new SqlConnection(conn)) 
    { 
     string sqlQuery = @"SELECT CDU_ESTADOS from testetiposdestados"; 
     MessageBox.Show(sqlQuery); 
     SqlCommand cmd = new SqlCommand(sqlQuery, sqlConn); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     DataTable table = new DataTable(); 
     da.Fill(table); 
     combobox1.DisplayMember = "CDU_ESTADOS"; 
     comboBox1.DataSource = new BindingSource(table, null); 
    } 
} 

順便說一句,SqlCommandSqlDataAdapter ,並且DataTable全部實現了IDisposable接口 - 所以您應該使用它們與using聲明。 另外,我建議開始使用當地的參數var關鍵字,它會使你的代碼更短,更易於閱讀:

public Form1() 
{ 
    InitializeComponent(); 
    var setting = ConfigurationManager.AppSettings["setting1"]; 
    var conn = ConfigurationManager.ConnectionStrings["test"].ConnectionString; 
    using (var sqlConn = new SqlConnection(conn)) 
    { 
     var sqlQuery = @"SELECT CDU_ESTADOS from testetiposdestados"; 
     MessageBox.Show(sqlQuery); 
     using(var cmd = new SqlCommand(sqlQuery, sqlConn)) 
     { 
      using(var da = new SqlDataAdapter(cmd)) 
      { 
       using(var table = new DataTable()) 
       { 
        da.Fill(table); 
        combobox1.DisplayMember = "CDU_ESTADOS"; 
        comboBox1.DataSource = new BindingSource(table, null); 
       } 
      } 
     } 
    } 
}