我似乎无法从我的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
答案 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";
希望这可以帮助其他人解决同样的问题。