2013-12-13 5 views
2

Короткая.Получить данные из базы данных в ComboBox

База данных с именем ComDet и столбец cID (c), cName, cDet, mainCate (FK), Subcat (FK).

это предполагают, чтобы получить данные из таблицы ComDet в выпадающий список ..

DataSet ds2; 

private void searchBtn_Click(object sender, EventArgs e) 
{ 
    SqlConnection conn = new SqlConnection(); 
    conn.ConnectionString = "Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"; 
    conn.Open(); 

    SqlDataAdapter daSearch = new SqlDataAdapter("SELECT cName FROM ComDet", conn); 
    ds2 = new DataSet(); 
    daSearch.Fill(ds2, "daSearch"); 
    ListU.ValueMember = "cName"; 
    ListU.DataSource = ds2.Tables["ComDet"]; 
    ListU.DropDownStyle = ComboBoxStyle.DropDownList; 
    ListU.Enabled = true; 
} 

но не работал .. где же я ошибся? Данные (cName) из таблицы базы данных ComDet не отображается в поле со списком. -

+1

Вы не сообщили нам, что означает «это не сработало»! –

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

Данные (cName) из таблицы базы данных ComDet не отображается в выпадающем списке. –

ответ

2

Проблема: Вы назначаете имя таблицы базы данных ComDet в DataSource но не DataTable Имя daSearch в ComboBox.

Решение: необходимо назначить действительный DataTable имя для ComboBox в Datasource.

Заменить Это:

ListU.DataSource = ds2.Tables["ComDet"]; 

с этим:

ListU.DataSource = ds2.Tables["daSearch"]; 

(или)

ListU.DataSource = ds2.Tables[0]; 

Полный код:

DataSet ds2; 

private void searchBtn_Click(object sender, EventArgs e) 
{ 
SqlConnection conn = new SqlConnection(); 
conn.ConnectionString = "Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"; 
conn.Open(); 

SqlDataAdapter daSearch = new SqlDataAdapter("SELECT cName FROM ComDet", conn); 
ds2 = new DataSet(); 
daSearch.Fill(ds2, "daSearch"); 
ListU.ValueMember = "cName"; 
ListU.DataSource = ds2.Tables["daSearch"]; 
ListU.DropDownStyle = ComboBoxStyle.DropDownList; 
ListU.Enabled = true; 
} 
+0

попробовал что-то .. не работал. .. –

+0

@MohdNasrulIwanFajaruddin: вам нужно предоставить 'DataTable' имя' daSearch' 'DataSource', см. мой отредактированный ответ, он отлично работает –

+0

спасибо! .. он работал также ..: D –

1

Итак, вопрос задает вопрос о том, как получить данные из базы данных в combobox. Лично я считаю использование класса DataSet неприемлемым - он довольно подвержен ошибкам, как здесь испытывает айзер.

Попробуйте этот подход. Который читает все cName в List и связывает List с номером ComboBox. Простой и понятный код. Использование операторов using также гарантирует эффективное освобождение неуправляемых ресурсов.

private void searchBtn_Click(object sender, EventArgs e) 
{ 
    var list = new List<string>(); 
    using (var conn = new SqlConnection()) 
    { 
     conn.ConnectionString = 
      "Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"; 
     conn.Open(); 
     using (var cmd = new SqlCommand("SELECT cName FROM ComDet", conn)) 
     { 
      using (var reader = cmd.ExecuteReader()) 
      { 
       while (reader.Read()) 
       { 
        list.Add(Convert.ToString(reader["cName"])); 
       } 
      } 
     } 
    } 
    ListU.DataSource = new BindingSource(list, null); 
    ListU.DropDownStyle = ComboBoxStyle.DropDownList; 
    ListU.Enabled = true; 
} 
Смежные вопросы