Как связать список объектов класса с сеткой данных, одно поле которой снова является объектом какого-то другого класса?

1

У меня есть следующий код, в котором мне нужно привязать список объектов класса к datagridview. В этом классе одно поле является объектом некоторого другого класса, в котором снова есть несколько полей. Пожалуйста, обратитесь к этому коду.

public class Test
{
    public string m_field1_Test { get; set; }
    public string m_field2_Test { get; set; }
    public string m_field3_Test { get; set; }
    public string m_field4_Test { get; set; }
    .
    .
    public string m_field100_Test{get; set;}
    public Test1 test1obj;

    public Test()
    {
        m_field1_Test = "field1";
        m_field2_Test = "field2";
        m_field3_Test = "field3";
        m_field4_Test = "field4";
        .
        .
        m_field100_Test = "field100";

        test1obj = new Test1();
    }
}

public class Test1
{
    public string m_field1_Test1;
    public string m_field2_Test1;
    public string m_field3_Test1; 
    .
    .
    .
    public string m_field30_Test1;   

    public Test1()
    {

        m_field1_Test1 = "field1_Test1";
        m_field2_Test1 = "field2_Test1";
        m_field3_Test1 = "field3_Test1"; 
        .
        .
        .
        m_field30_Test1 = "field30_Test1";
    }       
}

При нажатии кнопки Я привязываю список тестовых объектов к dataGridView. Код выглядит следующим образом.

   private void Button2_Click(object sender, EventArgs e)
    {
        List<Test> listTest = new List<Test>();
        Test obj;
        for (int i = 0; i < 1000000; i++)
        {
            obj = new Test();
            listTest.Add(obj);
        }
        label1.Text = listTest.Count().ToString();
        dataGridView1.DataSource = listTest;
        dataGridView1.BackgroundColor = Color.Beige;                
    }

Когда я выполняю эту большую часть, в поле datagridview появляются поле1 в поле4. Как я могу связать его таким образом, чтобы поля Test1 также отображались в datagridview в формате. Я хочу вывести что-то вроде этого.

     field1 | field2  | field3| ....field100|field1_Test1 |field2_Test1|...field30_Test1
            |         |       |             |              |            |
            |         |       |             |              |            |
            |         |       |             |              |            |

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

  • 0
    Я не совсем уверен, что вы делаете, но похоже, что вы хотите, чтобы Test наследовал от test1 а не просто создавал его. Вы хотите, чтобы test имел свойства test1 ?
  • 0
    Пожалуйста, попробуйте изучить этот учебник по DataBinding, в нем есть информация, которая вам нужна codeproject.com/Articles/24656/A-Detailed-Data-Binding-Tutorial
Показать ещё 1 комментарий
Теги:
list
winforms
datagridview

1 ответ

0
Лучший ответ

Преобразование вашего listTest в анонимный объект до его привязки откроет поля.

var dataSource = listTest.Select(l => new {field1 = l.m_field1_Test, 
                                           field2 = l.m_field2_Test, 
                                           field3 = l.m_field3_Test, 
                                           field4 = l.m_field4_Test,
                                           field1_Test1 = l.test1obj.m_field1_Test1,
                                           field2_Test1 = l.test1obj.m_field2_Test1, 
                                           field3_Test1 = l.test1obj.m_field3_Test1}); 

Это было бы лучше достигнуто в вашем цикле до 1000000, но я решил, что цикл до 1000000 - это не то, что вы сделали бы на производстве.

Если вы хотите исключить цикл for, вы можете сделать то же самое с Enumerable.Range:

var dataSource = Enumerable.Range(0, 1000000).Select(...

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

  • 0
    это не работает ..... ничего не отображается в gridview.
  • 0
    Можете ли вы поделиться полной логикой, поскольку это не работает на моем конце.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню