无法从SQL Server填充组合框

本文关键字:填充 组合 Server SQL | 更新日期: 2023-09-27 18:05:48

我似乎有麻烦从我的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

无法从SQL Server填充组合框

创建了一个数据表,从数据库中读取结果,但在将数据表绑定到控件之前,从未将查询结果加载到数据表中。

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

尝试使用"SelectedValuePath"代替"SelectedValue"。我不确定这是否会修复它,但我有一个类似的错误一段时间后,它修复了我的

我用几件事解决了这个问题。

首先是不使用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;

被称为AFTER this:

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

希望这能帮助到其他有同样问题的人