Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
21 / 21 / 7
Регистрация: 21.01.2013
Сообщений: 38

Не отображает данные из List<T> в DataGridView

21.01.2013, 17:22. Показов 2698. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, столкнулся с небольшой проблемой вывода информации из List<T> в DataGridView.
В программе имеется 3 класса: BaseClass, ChildClass, Child2Class. BaseClass родитель, и необходим для загрузки и чтения информации из базы данных. При помощи полиморфизма, ChildClass и Child2Class переопределяют методы под себя, в зависимости от того, какой узел выберет в TrewView на форме пользователь : "ChildClass или Child2Class" .
Код BaseClass:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 namespace test
{
   public  class BaseClass
 
    {
       public virtual BaseClass GetFill(SqlDataReader rdr)
       {
           BaseClass baseClass = new BaseClass();
           return baseClass;
       }
 
       public virtual string GetStroka()
       {
           string sql = "";
           return sql;
       }
 
       public virtual List<BaseClass> GetBaseList()
       {
           List<BaseClass> baseClassList = new List<BaseClass>();
 
           SqlConnection con =
               new SqlConnection(@"Data Source=localhost;Initial Catalog=test;integrated security=true;");
 
           {
               SqlCommand cmd = new SqlCommand(GetStroka(), con);
               {
                   cmd.CommandType = CommandType.Text;
                   con.Open();
                   SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                   while (rdr.Read())
                   {
                       BaseClass obj = GetFill(rdr);
                       baseClassList.Add(obj);
                   }
               if (!rdr.IsClosed)
                   rdr.Close();
               }     
           }
           return baseClassList;
} }
}
Код ChildClass (Child2Class идентичен, только со своими данными):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 namespace test
{
    class ChildClass : BaseClass
    {
        private int id;
        private string name;
 
        public int Id { get; set; }
        public string Name { get; set; }
        public override BaseClass GetFill(SqlDataReader rdr)
        {
            ChildClass childClass = new ChildClass();
            childClass.Id = Convert.ToInt32(rdr["Id"]);
            childClass.Name = rdr["Name"].ToString();
             return  childClass ;
        }
        public override string GetStroka()
        {
            string sql = "SELECT Id, Name FROM ChildClass";
            return  sql;
        }
        public override List<BaseClass> GetBaseList()
        {
            List<ChildClass> childClassList = new List<ChildClass>();
            return base.GetBaseList();
        } }  
}
Код Form1, имеются такие элементы как TreiView и DataGridView:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 namespace test
{
    public partial class Form1 : Form
    {
        private ChildClass childClass = new ChildClass();
        private Child2Class child2Class = new Child2Class();
        public Form1()
        {
            InitializeComponent();
            treeView1.Nodes.Add("ChildClass");
            treeView1.Nodes.Add("Child2Class");
        }
        private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            TreeNode node = e.Node;
            switch (node.Text)
            {
                case "ChildClass" :
                    List<BaseClass> childClassList = childClass.GetBaseList(); //Загоняю данные в List
                    dataGridView1.DataSource = childClassList; // Передаю в DataSource, данные там имеются но не выводятся.. Вот в этом проблема.
                    break;
 
                case "Child2Class":
                    List<BaseClass> child2ClassList = child2Class.GetBaseList();
                    dataGridView1.DataSource = child2ClassList;
                    break;
            }    }  }
}
Надеюсь описал понятно суть вопроса.
 Комментарий модератора 
Обсуждение только на форуме
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.01.2013, 17:22
Ответы с готовыми решениями:

Некорректно отображает данные в datagridview
В общем проблеа появилась после того как я попроавил в менеджере SQL размер поля Address с nchar(30) на nchar(35), все данные в таблицу...

DataGridView не отображает данные таблиц
Полазил по форуму, ответов не нашел. Делал приложение, основанное на существующей бд по примеру. Только вот в примере всё работает, а у...

Как поместить данные с List<T> в DataGridView
Здравствуйте столкнулся с проблемой помещения List&lt;T&gt; в DataGridView. У меня есть класс car public class car { public...

3
56 / 56 / 11
Регистрация: 13.04.2009
Сообщений: 169
22.01.2013, 00:19
Цитата Сообщение от Zen1a Посмотреть сообщение
public override List<BaseClass> GetBaseList()
* * * * {
* * * * * * List<ChildClass> childClassList = new List<ChildClass>();
* * * * * * return base.GetBaseList();
* * * * } }
из этого метода вы вернете List<BaseClass>
ошибки в команде нет изза того что метод гетстрока вызывается виртуально, и по сути выдает "select ...". вообще по сути тут не виртуальные методы нужны, а абстрактный класс
1
21 / 21 / 7
Регистрация: 21.01.2013
Сообщений: 38
22.01.2013, 12:26  [ТС]
Цитата Сообщение от martb1n Посмотреть сообщение
из этого метода вы вернете List<BaseClass>
ошибки в команде нет изза того что метод гетстрока вызывается виртуально, и по сути выдает "select ...". вообще по сути тут не виртуальные методы нужны, а абстрактный класс
Спасибо за совет, попробую абстрактным классом сделать.
0
21 / 21 / 7
Регистрация: 21.01.2013
Сообщений: 38
24.01.2013, 13:32  [ТС]
Решил проблему не используя абстрактный класс. Вместо такого вывода:
Цитата Сообщение от Zen1a Посмотреть сообщение
List<BaseClass> childClassList = childClass.GetBaseList(); //Загоняю данные в List
* * * * * * * * * * dataGridView1.DataSource = childClassList; // Передаю в DataSource, данные там имеются но не выводятся.. Вот в этом проблема.
Сделал такой :
C#
1
2
3
4
5
6
7
8
       BindingList<ChildClass> childClassBindingList = new BindingList<ChildClass>();
                    BindingList<BaseClass> baseClassBindingList = new BindingList<BaseClass>(childClass.GetBaseList());
                    foreach (var result in baseClassBindingList.Cast<ChildClass>())
                    {
                        childClassBindingList.Add(new ChildClass(result.Id, result.Name));
                    }
                   dataGridView1.DataSource = childClassBindingList;      
                break;
И в классе (ChildClass, Child2Class) get; set; расписал подробно, и все стало выводить как нужно. Решил поделится решением, т.к. возможно кто-то столкнется с подобной проблемой, и понадобится данное решение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2013, 13:32
Помогаю со студенческими работами здесь

Как поместить данные из List в dataGridView?
Есть класс public class User { public int id; public string name; public DateTime...

Ошибка трансляции List<List<string>> в DataGridView
Нужно вот такой список List&lt;List&lt;string&gt;&gt; отобразить в DataGridView Вот моя реализация. public int w { get; set; } ...

Как сделать так, чтобы диаграмма, которая отображает данные, также отображала и вновь введённые данные?
При вводе новых значений в таблицу Excel в ней увеличив-ся количество строк. Вопрос состоит в следущем: как сделать так, чтобы диаграмма,...

Как получить данные о том какие члены List выбраны, если List имеет свойство Multiselect = true?
Podskazite kak ja poluchi dannie o tom kakie chleni List vibrani, esli List imeet svoistvo Multiselect = true? Spasibo! Inessa

DataGridView не отображает таблицу
Делаю пример из книжки, первое приложение Windows Forms. По идее carInventoryGridView.DataSource = inventoryTable; должен обеспечить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru