2013-12-12 2 views
0

Еще обучение C#Загружена форма, но как извлечь данные из SQL в combobox?

выпадающим создаются и таблица называется mainCat и подкатегория создаются.

У меня есть код, но я застрял, чтобы понять, как получить данные из mainCat в comboBox, который затем используется другим comboBox для subCat для установки подкатегории.

Подключенное соединение Подчеркнуто красным. Зачем?

Вот мой код -

System.Data.SqlServerCe.SqlCeConnection con; 
System.Data.SqlServerCe.SqlCeDataAdapter da; 
DataSet ds1; 

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

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    using (SqlConnection Con = GetConnection()) 
    { 
     SqlDataAdapter da = new SqlDataAdapter("Select Category.Category ,Category.Id from Category", Con); 
     SqlCommand cmd = new SqlCommand("SELECT * from MAINCAT"); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 
     mainCatU.DataSource = dt; 
     mainCatU.DisplayMember = "Category"; 
     mainCatU.ValueMember = "Id"; 
     mainCatU.Text = "<-Please select Category->"; 
     myComboBox.DropDownStyle = ComboBoxStyle.DropDownList; 
    } 

} 

Так я тогда я попробовал другой код .. но все еще не работает ..

public partial class User : Form 
{ 
     System.Data.SqlServerCe.SqlCeConnection con; 
     System.Data.SqlServerCe.SqlCeDataAdapter da; 
     DataSet ds1; 

     private void User_Load(object sender, EventArgs e) 
     { 
      con = new System.Data.SqlServerCe.SqlCeConnection(); 
      con.ConnectionString = "Data Source=PEWPEWDIEPIE\\SQLEXPRESS;Integrated Security=True"; 
      con.Open(); 
      MessageBox.Show("Database connected"); 
      ds1 = new DataSet(); 
      string sql = "SELECT * from MAINCAT"; 
      da = new System.Data.SqlServerCe.SqlCeDataAdapter(sql, con); 
      da.Fill(ds1, "SCSID"); 
      mainCatU.DataSource = ds1; 
      con.Close(); 
      mainCatU.Text = "<-Please select Category->"; 
      mainCatU.DropDownStyle = ComboBoxStyle.DropDownList; 
      mainCatU.Enabled = true; 
     } 
} 

тогда я просто использовал функцию элемента данных, связанные через выпадающий список GUI ..

this.mAINCATTableAdapter.Fill(this.masterDataSet.MAINCAT); 

, но коробка не показывают никакого значения, кроме "System.Data.DataRowView" в comboBo х

============================================= =====================================

System.Data.SqlServerCe.SqlCeConnection con; //not used at the moment 
System.Data.SqlServerCe.SqlCeDataAdapter da; //not used at the moment 
DataSet ds1; 

private void User_Load(object sender, EventArgs e) 
{ 

    SqlConnection conn = new SqlConnection(); 
    conn.ConnectionString = "Data Source=PEWPEWDIEPIE\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"; 
    conn.Open(); 
    MessageBox.Show("Database connected"); 

    SqlDataAdapter da = new SqlDataAdapter("SELECT * from MAINCAT", conn); 
    ds1 = new DataSet(); 
    da.Fill(ds1, "MainCat"); 
    mainCatU.DisplayMember = "maincat"; 
    mainCatU.ValueMember = "maincat"; 
    mainCatU.DataSource = ds1.Tables["MAINCAT"]; 

} 

====== =========

и поле со списком еще не показывает ничего из таблицы базы данных

+0

Intellisense должен сказать вам, почему, но, по предположению, существует 'GetConnection()' существует? Если да, пожалуйста, напишите код для него –

+0

ах .. нет .. я не думаю, что он существует .. код правильный, кстати? –

+0

Я считаю, что он скомпилируется, если вы создадите функцию соединения. –

ответ

1

Вам нужно создать функцию GetConnection():

public string ConnectionString { get; set;} 

public SqlConnection GetConnection() 
{ 
    SqlConnection cn = new SqlConnection(ConnectionString); 
    return cn; 
} 

ТВН, если вы не хотите сделать что-то в GetConnection, вы могли бы быть лучше просто создать его рядный:

using (SqlConnection Con = new SqlConnection(ConnectionString)) 
{ 

EDIT:

Основываясь на своем пересмотренном вопрос, я думаю, что проблема может теперь быть здесь:

mainCatU.DisplayMember = "maincat"; 
mainCatU.ValueMember = "maincat"; 
mainCatU.DataSource = ds1.Tables["MAINCAT"]; 

Я предполагаю, что ваша структура стола не является maincat.maincat. Элементы отображения и значения должны быть установлены на имя поля, которое вы хотите отобразить.

+0

oh, ok .. Мне просто нужно получить данные из базы данных в combobox. Я попробую это через секунду. –

+0

+1, Строки подключения должны быть встроенными, с ним завернутый в оператор using. Функция GetConnection в этом случае не нужна. –

+0

@ pm_2 - я сдаюсь ... –

0

Я очень сожалею, что я являюсь разработчиком VB, но концепция того же для заполнения данных в комбо с помощью SQL является

Declare SQLConnection Объявить SqlDataReader Объявить SQLCommand

Try 
    If Con.State = ConnectionState.Closed Then 
     Con.Open() 

    cmd.Connection = Con 
    cmd.CommandText = "Select field1, field2 from table" 


    dr = cmd.ExecuteReader() 

    ' Fill a combo box with the datareader 
    Do While dr.Read = True 
     ComboBoxName.Items.Add(dr.GetString(0)) 
     ComboBoxName.Items.Add(dr.GetString(1)) 
    Loop 

    Con.Close() 
    End If 

Catch ex As Exception 
    MsgBox(ex.Message) 

End Try 

Надеется, что это работает для вас.

Смежные вопросы