C# Winforms绑定ListBox到DataTable的问题

3

嗯,当我绑定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字符串。 enter image description here 数据库没有问题。应用程序正在接收数据,并且数据是正确的。如果我迭代我的datatable,我将得到id和title作为列名称,所以它们没有问题。
我读到说问题可能通过改变绑定顺序或将ListBox.Sorted属性设置为false来解决。我已经尝试了所有这些,但仍然没有成功。
有任何建议吗? 除了逐个迭代datarows并手动添加它们之外,还有其他解决方案吗?
最好的问候。

可能是重复的问题:https://dev59.com/B1_Va4cB1Zd3GeqPQB7B - DonBoitnott
嗯,确实是这样,但那里发布的解决方案并没有解决我的问题。 - fakemeta
3个回答

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

输入图像描述

编辑:你可能需要先提供数据源,然后声明值显示成员。


谢谢你的努力,但我已经解决了这个问题。它是由自定义的DrawItem事件引起的。 - fakemeta

0

重新排列语句:

ScheduleList.DisplayMember = "title";
ScheduleList.ValueMember = "id";
ScheduleList.DataSource = results;

0

我的错。由于自定义 ListBox DrawItem 事件中的不适当代码,ListBox 没有对 DisplayMember 和 ValueMember 的更改做出反应。


我怀疑是这样的,因为我的测试以及我找到的每个搜索结果都表明,你所写的代码应该能够正常工作。 - DonBoitnott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接