Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将一个类的对象列表绑定到一个datagridview,该datagridview的一个字段又是另一个类的对象?_C#_Winforms_List_Datagridview - Fatal编程技术网

C# 如何将一个类的对象列表绑定到一个datagridview,该datagridview的一个字段又是另一个类的对象?

C# 如何将一个类的对象列表绑定到一个datagridview,该datagridview的一个字段又是另一个类的对象?,c#,winforms,list,datagridview,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_f

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

有人能告诉我如何实现此功能吗???

在绑定前将
列表测试转换为匿名对象将公开字段

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(...

另外,作为提示,您应该避免将逻辑放入事件处理程序中。将它拉到自己的方法中,这样它就可以在其他地方重用。

我不太确定您在做什么,但看起来您希望
Test
继承自
test1
,而不仅仅是实例化它。您希望
test
具有
test1
属性吗?请尝试在数据绑定时检查此tuturial,它具有@paqogomez no i not wnat test从test1继承所需的信息。我想使用Test1的对象将Test1的字段绑定到datagridview。您能否共享完整的逻辑,因为这在我这边不起作用。@Neha我创建了一个来显示其转换方式。对于控制台,您使用“项”迭代数据源。在我的代码中,我将datagridview1.datasource与使用LINQ创建的datasource一起分配。但它再次不起作用。数据将进入datasource,但它不会与gridview控件绑定。最后它起作用了。我错过了一件小事。非常感谢@paqogomez@Neha杰出的我担心我错过了什么。谢谢你的回答(并向上投票!)!
var dataSource = Enumerable.Range(0, 1000000).Select(...