C# Datagridview WinForms вывод объекта в объекте?

110
30 января 2021, 23:10

Возможно ли вывести в таблицу сложный объект Person со следующими столбцами:

Person.Name | Person.Finance.BankName | Person.Finance.Balance

    class Person
    {
        public string Name {get;set;}
        public FinanceData Finance {get;set;}
    }
    class FinanceData 
    {
        public string BankName {get;set;}
        public double Balance {get;set;}
        //Кстати, если в Balance хранятся деньги, то ни в коем случае нельзя 
        //использовать тип double. Только decimal.
    }

Можно ли это вывести в таблицу без написания класса обертки? Если возможно, то как это сделать?

Answer 1

это с привязкой

    private void Form1_Load(object sender, EventArgs e)
    {
        List<Person> people = new List<Person>() {
            new Person(){
                 Name = "Абраах",
                 Finance = new FinanceData() { Balance = 3.1, BankName = "asd" }
            },
            new Person(){
                 Name = "Ибрагим",
                 Finance = new FinanceData() { Balance = 5.6, BankName = "я" }
            },
            new Person(){
                 Name = "Придурок",
                 Finance = new FinanceData() { Balance = 3.3, BankName = "gfds" }
            }
        };
        BindingSource bs = new BindingSource(); bs.DataSource = serializePeople(people);
        dataGridView1.DataSource = bs;
    }
    private DataTable serializePeople(List<Person> people)
    {

        DataTable returnTable = new DataTable("Table");
        returnTable.Columns.Add(new DataColumn("Name"));
        returnTable.Columns.Add(new DataColumn("FinanceBalance"));
        returnTable.Columns.Add(new DataColumn("FinanceBankName"));
        foreach (Person person in people)
        {
            returnTable.AcceptChanges();
            DataRow row = returnTable.NewRow();
            row[0] = person.Name;
            row[1] = person.Finance.Balance.ToString();
            row[2] = person.Finance.BankName;
            returnTable.Rows.Add(row);
        }
        return returnTable;
    }
Answer 2
List<Person> people = new List<Person>() {
                new Person(){
                     Name = "Абраах",
                     Finance = new FinanceData() { Balance = 3.1, BankName = "asd" }
                },
                new Person(){
                     Name = "Ибрагим",
                     Finance = new FinanceData() { Balance = 5.6, BankName = "я" }
                },
                new Person(){
                     Name = "Придурок",
                     Finance = new FinanceData() { Balance = 3.3, BankName = "gfds" }
                }
            };
            people.ForEach(p => { dataGridView1.Rows.Add(p.Name, p.Finance.Balance.ToString(), p.Finance.BankName); });
READ ALSO
cannot be opened because it is version 852

cannot be opened because it is version 852

Создал проект в VS17, добавил станадртный сервер(Express):

93
Зачем в BitVector32 используется как int, так и uint?

Зачем в BitVector32 используется как int, так и uint?

Разбираю BitVector32Возник такой вопрос: зачем смешивают использование int и uint? В том же самом конструкторе, например

116
Поиск элементов в ListBox

Поиск элементов в ListBox

Есть у нас ListBox, в который через ItemsSource мы загружаем коллекцию объектовУ этих объектов есть свойство Title, и нужно чтобы по этому свойству и происходил...

123
Делегаты и производительность

Делегаты и производительность

Делегат это ссылка на методТо есть если мы делаем элементарную реализацию типа такой:

107