Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2011, 15:15   #1
Evil_Crab
Новичок
Джуниор
 
Регистрация: 25.02.2011
Сообщений: 1
Вопрос С# Отображение классов-наследников в DataGridView

Добрый день.

Программируя дз по инфе столкнулся со следующей проблемой.

Есть list содержащий некий базовый класс.

Код:
db = new List<Dreves>();
Структура классов такова:



Данный list постепенно заполняется объектами его классов-наследников

Код:
        private void Add_Btn_Click(object sender, EventArgs e)
        {
            switch (TabControl.SelectedTab.Name)
            {
                case "Pilom_Tab":
                    db.Add(new Pilom(Pilom_Type.Text,(int)Pilom_Cost.Value));
                    break;

                case "Drova_Tab":
                    db.Add(new Drova(Drova_Type.Text,(int)Drova_Cost.Value));
                    break;

                case "Doska_Tab":
                     db.Add(new Doska(Doska_Type.Text,(int)Doska_Cost.Value,(int)Doska_Length.Value,(int)Doska_Height.Value,Doska_Cycle_Yes.Checked));
                    break;

                case "Brus_Tab":
                    db.Add(new Brus(Brus_Type.Text,(int)Brus_Cost.Value,(int)Brus_Length.Value,(int)Brus_Height.Value,(int)Brus_Width.Value,Brus_Cycle_Yes.Checked));
                    break;
            }
            BindingSource.ResetBindings(true);
        }
Одно из заданий дз, выводить на экран обьекты задаваемого пользователем типа. Или все объекты разом.

Первоначально, для общего вывода я думал использовать DataGridView, через BindingSource

Код:
            BindingSource.DataSource = db;
            DataGridView.AutoGenerateColumns = true;
            DataGridView.DataSource = BindingSource;
А для вывода элементов конкретного типа использовать еще один list базового класса, в который можно скопировать объекты нужного для показа типа, показать их привязав этот list к BindingSource, а перед показом следующего типа очищая его.

Но проблема в том, что DataGridView выводит только те поля, что есть в базовом классе, а поля появившиеся в классах наследниках игнорирует. Как можно реализовать показ полей классов наследников?

Я вижу два выхода.

1. Создать по отдельному list'у на каждый из классов, и отображать через них, но тогда не понятно как отображать, в случае необходимости показа всех имеющихся объектов, да и само решение какое то не красивое.
2. Забить на DataGridView и заюзать ListBox, но тогда придется парится с форматированием вывода, чтобы в итоге получалось нечто, более менее похожее на таблицу, а это геморно.

Собственно, жду ваших советов, по реализации вывода полей классов наследников в DataGridView.

Заранее спасибо!

P.S. Среда программирования - Visual Studio 2008/2010, язык C#.
Evil_Crab вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DataGridView Maladoj Общие вопросы .NET 1 24.11.2010 14:18
DataGridView - медленное отображение avd Общие вопросы .NET 1 04.07.2010 11:22
C#, datagridview Studento4ka Помощь студентам 0 21.11.2009 13:34
Создание классов и использование объектов классов при написании программ в среде C++. Frozen inside Помощь студентам 0 16.04.2009 23:18
Отображение скрытых файлов и папок и отображение розширения всех файлов beegl Общие вопросы Delphi 10 14.12.2008 22:02