我有一个List<Node>,里面加载了x,y,z坐标,DataGridView中也有x,y,z坐标,想VIew中显示List,但我View.DataSource = List;  报错:“无法创建字段类的子列表。”请高手赐教!!!DataGridViewList

解决方案 »

  1.   

    foreach (var x in list)
        dgv.Rows.Add(new string[] { x.x.ToString(), x.y.ToString(), x.z.ToString() });
      

  2.   

    除了单行赋值,能统一赋值吗?
    这样如果界面表格里的数据改变,会体现在List中吗?要达到我的这种要求,您感觉什么比较合适吗?有例程吗?谢谢啦~~~
      

  3.   

    不会啊。数据改变,重新load一下就好了。
      

  4.   

    额,因为我不知道你这个list究竟是个什么结构,但从你的报错信息来看,我认为你的View.DataMember这里要么没有设,要么设置有误。具体就得去看,你这个list究竟是啥结构了
      

  5.   

    如果我想整体加载,界面改变数据也随着变化。
    可能会用到BlindList?
    请赐教哈~~~
    谢谢~~~
    有相关例程不?
      

  6.   

    List里只有三个元素:double x, double y, double z
    界面上有三列,也分别是x,y,z
    我想整体加载,界面改变数据也随着变化,请问这样如何实现呢?
    是不是不能用List了?
      

  7.   

    我不知道你那里有什么样的问题,起码我看起来没有任何问题。你先看看你的DataMember属性设置的是什么,不光是view上的,你view里面的列绑定那块也看看先反正闲着木事,我后面开vs自己做做看看有木问题
      

  8.   

    应该木啥问题啊,就这么直接绑定,木有任何问题,后面按钮也可以直接得到修改后的结果
    界面上什么都没放一个datagridview,一个button,其他什么都木有
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                List<Node> list = new List<Node>();
                list.Add(new Node { x = 1.0, y = 2.0, z = 3.0 });
                list.Add(new Node { x = 2.0, y = 4.0, z = 3.0 });
                this.dataGridView1.DataSource = list;
            }
            //修改后结果
            private void button1_Click(object sender, EventArgs e)
            {
                List<Node> res = this.dataGridView1.DataSource as List<Node>;
            }
        }
        class Node
        {
            public double x { get; set; }
            public double y { get; set; }
            public double z { get; set; }
        }
    }
      

  9.   

    因为你说就只是一个list<node>,那么就记着别去设置DataMember,只要你view和列上有一个设置了这东西,那么就会报你上面的错误,因为你这个简单数据源上根本不存在“子列表集合”,DataMember找不到东西自然报错
      

  10.   


    额,因为你的列,还木有指定绑定到那个属性上。因为是UI上操作,所以俺木贴出来
    如果不想设置,那就让他自己默认生成列看效果吧    List<Node> list = new List<Node>();
                list.Add(new Node { x = 1.0, y = 2.0, z = 3.0 });
                list.Add(new Node { x = 2.0, y = 4.0, z = 3.0 });
                this.dataGridView1.DataSource = list;
                this.dataGridView1.AutoGenerateColumns = true
    后面加上这一句,自动生成列,就应该可以看到东西了