System.Data.DataRowViewc#

System.Data.DataRowView c#

每当我 运行 返回此代码时 - System.Data.DataRowView。 我不明白这是什么问题。我试图寻找 here 的解决方案,但我无法理解(我是编程新手..)。

public void loadLabels()
    {

        using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dbString))
        {
            connection.Open();


            String strDa = "SELECT Lessons.number, Lessons.type, Lessons.datel, Lessons.hour , Lessons.money, Lessons.note FROM Lessons";
            using (OleDbDataAdapter da = new OleDbDataAdapter(strDa, connection))
            {
                DataTable t = new DataTable();
                da.Fill(t);

                listBox1.DataSource = t;

            }

        }
    }

ListBox 控件获取 DataTable 的每个元素并为其 Items 属性 构建一个元素。但是当它添加一个元素时,它不知道应该在添加到集合的每个字符串中显示哪个数据库字段。在这种情况下,它使用用于添加元素的对象的 ToString 方法。在您的例子中是 DataRowView class 的 ToString 方法。但是 DataRowView class 没有实现任何特定的 ToString() 方法,因此调用了基本实现 (object.ToString()) 而这个 returns 只是 class 的名称.

您可以使用属性

更改此行为
 listBox1.DataSource = t;
 listBox1.DisplayMember = "datel";
 listBox1.ValueMember = "number";

这将只显示您查询的一列。如果您想显示多列,您有两种选择。放弃 ListBox 控件并使用 DataGridView(本网站中有很多示例,使用搜索功能)或在查询中创建一个别名以将多个字段连接在一起[=13​​=]

String strDa = @"SELECT Lessons.number, Lessons.type, Lessons.datel, 
                Lessons.hour, Lessons.money, Lessons.note,
                Lessons.datel & ' ' & Lessons.hour & ' - ' & Lessons.money as LessonDetails
                FROM Lessons";

....
listBox1.DisplayMember = "LessonDetails";

这有点笨拙,显示效果不是很整洁。我建议为此任务使用 DataGridView