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

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте, столкнулся с небольшой проблемой вывода информации из 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2013, 17:22
Ответы с готовыми решениями:

Некорректно отображает данные в datagridview
В общем проблеа появилась после того как я попроавил в менеджере SQL размер поля Address с...

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

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

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

3
56 / 56 / 11
Регистрация: 13.04.2009
Сообщений: 169
22.01.2013, 00:19 2
Цитата Сообщение от 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  [ТС] 3
Цитата Сообщение от martb1n Посмотреть сообщение
из этого метода вы вернете List<BaseClass>
ошибки в команде нет изза того что метод гетстрока вызывается виртуально, и по сути выдает "select ...". вообще по сути тут не виртуальные методы нужны, а абстрактный класс
Спасибо за совет, попробую абстрактным классом сделать.
0
21 / 21 / 7
Регистрация: 21.01.2013
Сообщений: 38
24.01.2013, 13:32  [ТС] 4
Решил проблему не используя абстрактный класс. Вместо такого вывода:
Цитата Сообщение от 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
24.01.2013, 13:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2013, 13:32
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru