Система.Данные.DataRowView С#

Всякий раз, когда я запускаю этот код, я возвращаюсь - System.Data.DataRowView. Я не понимаю, в чем проблема. Я попытался посмотреть здесь для решений, но я не могу понять (я новичок в программировании..).

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;

            }

        }
    }

person bar    schedule 06.07.2015    source источник
comment
Вам нужно установить свойства DisplayMember и ValueMember вашего listBox1.   -  person dub stylee    schedule 06.07.2015


Ответы (1)


Элемент управления ListBox берет каждый элемент вашей таблицы данных и создает элементы для своей Элементы. Но когда он добавляет элемент, он не знает, какое из полей вашей базы данных должно отображаться в каждой из строк, добавленных в коллекцию. В этом случае он использует метод ToString объекта, используемый для добавления элементов. В вашем случае это метод ToString класса DataRowView. Но класс 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 для этой задачи.

person Steve    schedule 06.07.2015
comment
спасибо но пишет что listBox1.ValueMember = Lessons.number; является ошибкой: в System.Windows.Forms.dll произошло необработанное исключение типа «System.ArgumentException». - person bar; 06.07.2015
comment
Исправлено. Просто название поля - person Steve; 06.07.2015
comment
в порядке. но теперь он показывает только дату или последнее, что я написал в Displaymember. как он может показывать все остальное? - person bar; 06.07.2015
comment
ListBox не может отображать более одного столбца. У вас есть два варианта. Переключитесь на DataGridView (рекомендуется) или создайте в запросе псевдоним, включающий все столбцы, которые вы хотите отобразить. - person Steve; 06.07.2015
comment
это была моя проблема!! я использую listBox, а не DataGridView! спасибо :) - person bar; 06.07.2015