2016-09-06 54 views
0

填充組合框我似乎遇到了問題,從我的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

回答

0

嘗試使用 「SelectedValuePath」 而不是 「的SelectedValue」。我不確定這是否能解決問題,但我有一個類似的錯誤,並修復了我的問題。

+0

嗯,這沒有什麼區別:( –

+0

我沒有足夠的代表評論其他答案,但也許嘗試在分配ComboBox值之前加載您的DataTable?也許在「reader」初始化之前將其移動? – Hank

1

您創建一個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中必須加載 –

0

我已經用一些東西解決了這個問題。

首先是代替使用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"; 

希望這有助於其他有同樣問題。