System.Data.DataRowView c#

时间:2015-07-06 16:54:44

标签: c# visual-studio system.data

每当我运行此代码时,我都会回来 - 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;

            }

        }
    }

1 个答案:

答案 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执行此任务