如何将类的对象列表绑定到datagridview,其中一个字段又是某个其他类的对象?

时间:2014-12-12 15:29:03

标签: c# winforms list datagridview

我有以下代码,我必须将类的对象列表绑定到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;                
    }

当我执行这么多部分时,只有field1到field4出现在datagridview中。我怎样才能以这种方式绑定它,以便Test1字段也以格式显示在datagridview中。我希望输出类似这样的内容。

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

有人可以告诉我如何实现这个功能吗?

1 个答案:

答案 0 :(得分: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(...

另外,只是提示,您应该避免将逻辑放入事件处理程序中。将其拉入自己的方法中,以便在其他地方重复使用。