无法从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
创建了一个数据表,从数据库中读取结果,但在将数据表绑定到控件之前,从未将查询结果加载到数据表中。
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";
希望这能帮助到其他有同样问题的人