每当我运行此代码时,我都会回来 - 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;
}
}
}
答案 0 :(得分:1)
ListBox控件获取DataTable的每个元素,并为其Items属性构建元素。但是当它添加一个元素时,它不知道应该在添加到集合中的每个字符串中显示哪个数据库字段。在这种情况下,它使用用于添加元素的对象的ToString方法。在您的情况下是DataRowView类的ToString方法。但是DataRowView类没有实现任何特定的ToString()方法,因此调用了基本实现(object.ToString()),这只返回类的名称。
您可以使用属性
更改此行为 listBox1.DataSource = t;
listBox1.DisplayMember = "datel";
listBox1.ValueMember = "number";
这将只显示您查询的一列。如果要显示多个列,则有两个选项。抛弃ListBox控件并使用DataGridView(此站点中有很多示例,使用搜索功能)或在查询中创建别名以将多个字段连接在一起
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执行此任务