无法从SQL Server填充Combobox

时间:2016-09-06 16:18:40

标签: c# sql

我似乎无法从我的SQL服务器填充组合框。

由于我已经更改了此示例的服务器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

3 个答案:

答案 0 :(得分:1)

您创建数据表,从数据库中读取结果,但在将数据绑定到控件之前,永远不会将查询结果加载到数据表中。

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));

答案 1 :(得分:0)

尝试使用" SelectedValuePath"而不是" SelectedValue"。我不确定这是否能解决这个问题,但我一时间遇到了类似的错误,并且修复了它。

答案 2 :(得分: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";

希望这可以帮助其他人解决同样的问题。