不能从SQL Server

问题描述:

填充组合框我似乎遇到了问题,从我的SQL Server填充一个组合框。不能从SQL Server

至于原因,我已经改变了这个例子,用户名和密码,服务器IP,但我已经调试这一点,我知道它连接到服务器。

而且在那里说

if (reader.HasRows) 
{ 
    MessageBox.Show("It has rows!!"); 
} 

它拉过,因为它有行,但在组合框仍然是空的。

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); 

builder.DataSource = "123.456.789.101"; 
builder.InitialCatalog = "DiscoverThePlanet"; 
builder.UserID = "MadeupUser"; 
builder.Password = "MadeupPass"; 

string connectionString = builder.ConnectionString;  
DataTable dt = new DataTable(); 

using (SqlConnection conn = new SqlConnection(connectionString)) 
{ 
    conn.Open(); 

    SqlCommand cmd = new SqlCommand("SELECT NoteID, NoteName, Note FROM Notes"); 
    SqlDataReader reader; 

    cmd.Connection = conn; 
    reader = cmd.ExecuteReader();  
    dt.Columns.Add("NoteID", typeof(string)); 
    dt.Columns.Add("NoteName", typeof(string)); 
    dt.Columns.Add("Note", typeof(string)); 

    if (reader.HasRows) 
    { 
     MessageBox.Show("It has rows!!"); 
    } 
    else 
    { 
     MessageBox.Show("It doesn't have rows :("); 
    } 

    //foreach (DataRow dataRow in dt.Rows) 
    //{ 
    // foreach (var item in dataRow.ItemArray) 
    // { 
    //  System.Diagnostics.Debug.Write(item); 
    // } 
    //} 

    noteNamesList.DataContext = dt; 
    noteNamesList.SelectedValue = "NoteID"; 
    noteNamesList.DisplayMemberPath = "NoteName";  
    dt.Load(reader);  
    conn.Close(); 
} 

任何我错过了或任何帮助将不胜感激。

组合框被命名为:noteNamesList

尝试使用 “SelectedValuePath” 而不是 “的SelectedValue”。我不确定这是否能解决问题,但我有一个类似的错误,并修复了我的问题。

+0

嗯,这没有什么区别:( –

+0

我没有足够的代表评论其他答案,但也许尝试在分配ComboBox值之前加载您的DataTable?也许在“reader”初始化之前将其移动? – Hank

您创建一个DataTable,你看从你的数据库的结果,但你永远不会在你面前将其绑定加载查询结果发送到您的数据表来控制。

reader = cmd.ExecuteReader(); 
dt.Load(reader); 

//there is no reason to add columns to your datatable. you can remove these lines: 
//dt.Columns.Add("NoteID", typeof(string)); 
//dt.Columns.Add("NoteName", typeof(string)); 
//dt.Columns.Add("Note", typeof(string)); 
+0

'dt.Load(读卡器);'附近出现提供的代码的底部... – Bridge

+0

那好吧,我甚至没有意识到,由于 –

+0

@Bridge - 但到DataTable的绑定尝试后,这是。 。之前它一定控制列表控件DataTable中必须加载 –

我已经用一些东西解决了这个问题。

首先是代替使用noteNamesList.DataContext = dt;

我在这里使用noteNamesList.ItemSource = dt.DefaultView;

另外:

noteNamesList.DataContext = dt; 
    noteNamesList.SelectedValue = "NoteID"; 
    noteNamesList.DisplayMemberPath = "NoteName";  
    dt.Load(reader);  
    conn.Close(); 

我感动:dt.Load(reader);了所以它的正下方:

dt.Columns.Add("NoteID", typeof(string)); 
    dt.Columns.Add("NoteName", typeof(string)); 
    dt.Columns.Add("Note", typeof(string)); 

所以它是这样的:

dt.Columns.Add("NoteID", typeof(string)); 
    dt.Columns.Add("NoteName", typeof(string)); 
    dt.Columns.Add("Note", typeof(string)); 
    dt.Load(reader); 

最后我确信,在

noteNamesList.ItemSource = dt.DefaultView; 

被称为在此之后:

noteNamesList.SelectedValue = "NoteID"; 
    noteNamesList.DisplayMemberPath = "NoteName"; 

希望这有助于其他有同样问题。