好吧,我在将ListBox控件绑定到DataTable时遇到了问题。
代码:
using (DbWrapper db = DbFactory.GetConnection("SQLite").WrapIn<MyDbWrapper>())
{
db.Open();
DataTable results = db.ExecuteQuery("SELECT id,title FROM schedule");
ScheduleList.DataSource = results;
ScheduleList.DisplayMember = "title";
ScheduleList.ValueMember = "id";
}
此代码应该从我的SQLite数据库接收数据,并将其绑定到我的ScheduleList,但是当我编译时,我看到我的ListBox填充了System.Data.DataRowView字符串。
数据库没有问题。应用程序正在接收数据,数据是正确的。如果我遍历我的数据表,我会得到id和title作为列名,所以它们没有错。
我已经读过可以通过更改绑定顺序或将ListBox.Sorted属性设置为false来解决问题。我已经尝试了所有这些但仍然没有成功。
有什么建议吗? 除了迭代数据行并手动添加它们之外,还有其他解决方案吗?
最诚挚的问候。
答案 0 :(得分:4)
我使用了这段代码并且有效。
DataTable oTable = new DataTable();
oTable.Columns.Add("ID", typeof(int));
oTable.Columns.Add("TITLE", typeof(string));
DataRow oNewRow = null;
for (int i = 0; i < 10; i++)
{
oNewRow = oTable.NewRow();
oNewRow["ID"] = i;
oNewRow["TITLE"] = "Title_" + i.ToString();
oTable.Rows.Add(oNewRow);
}
listBox1.DataSource = oTable;
listBox1.ValueMember = "ID";
listBox1.DisplayMember = "TITLE";
修改强> 您可能需要先提供数据源,然后声明值显示成员。
答案 1 :(得分:0)
重新安排陈述:
ScheduleList.DisplayMember = "title";
ScheduleList.ValueMember = "id";
ScheduleList.DataSource = results;
答案 2 :(得分:0)
我的坏。由于自定义ListBox DrawItem事件中的代码不合适,ListBox没有对DisplayMember和ValueMember更改做出反应。