Home Articles

C#Winforms将ListBox绑定到DataTable问题

Asked
Viewed 63 times
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

数据库没有问题 . 应用程序正在接收数据,数据是正确的 . 如果我遍历我的数据表,我会得到id和title作为列名,所以它们没有错 .

我已经读过可以通过更改绑定顺序或将ListBox.Sorted属性设置为false来解决问题 . 我已经尝试了所有这些但仍然没有成功 .

有什么建议?除了遍历数据行并手动添加它们之外,还有其他解决方案吗?

最好的祝福 .

3 Answers

  • 4

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

  • 0

    我使用这个代码,它工作 .

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

    enter image description here

    EDIT: 您可能需要先提供数据源,然后声明值显示成员 .

  • 0

    重新排列声明:

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

Related