winForms + DataGridView binding to a List

后端 未结 4 859
夕颜
夕颜 2020-12-29 20:15

I\'m trying to bind a List to a DataGridView control, and I\'m not having any luck creating custom bindings.

I have tried:

gvPr         


        
相关标签:
4条回答
  • 2020-12-29 20:16

    Another solution I've found is to use the BindingList collection.

    
    
    private void Form1_Load(object sender, EventArgs e)
    {
       BindingList people= new BindingList {
        new Person {Name="John",Age=23},
        new Person {Name="Lucy",Age=16}
      };
    
       dataGridView1.DataSource= people;
    }
    

    It works fine for me,

    0 讨论(0)
  • 2020-12-29 20:27

    Is the property on the grid you are binding to Opcode as well?.. if you want to bind directly to List you would just DataSource = list. The databindings allows custom binding. are you trying to do something other than the datasource?

    You are getting a bunch of empty rows? do the auto generated columns have names? Have you verified data is in the object (not just string.empty) ?

        class MyObject
        {
            public string Something { get; set; }
            public string Text { get; set; }
            public string Other { get; set; }
        }
    
        public Form1()
        {
            InitializeComponent();
    
            List<MyObject> myList = new List<MyObject>();
    
            for (int i = 0; i < 200; i++)
            {
                string num = i.ToString();
                myList.Add(new MyObject { Something = "Something " + num , Text = "Some Row " + num , Other = "Other " + num  });
            }
    
            dataGridView1.DataSource = myList;
        }
    

    this should work fine...

    0 讨论(0)
  • 2020-12-29 20:39

    I can't really tell what you're trying to do with the example you included, but binding to a generic list of objects is fairly straightforward if you just want to list the objects:

        private BindingSource _gridSource;
    
        private BindingSource GridSource
        {
            get
            {
                if (_gridSource == null)
                    _gridSource = new BindingSource();
                return _gridSource;
            }
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
            List<FluffyBunny> list = new List<FluffyBunny>();
            list.Add(new FluffyBunny { Color = "White", EarType = "Long", Name = "Stan" });
            list.Add(new FluffyBunny { Color = "Brown", EarType = "Medium", Name = "Mike" });
            list.Add(new FluffyBunny { Color = "Mottled", EarType = "Short", Name = "Torvald" });
    
            GridSource.DataSource = list;
            dataGridView1.Columns["EarType"].Visible = false; //Optionally hide a column
            dataGridView1.DataSource = GridSource;
    
        }
    

    If you only want to display specific properties of the List's type you should be able to make the unwanted column(s) invisible.

    Technically, you don't really need to create the BindingSource, but I find it's a whole lot easier when I'm doing updates or changes if I have it.

    Hope this helps.

    0 讨论(0)
  • 2020-12-29 20:41

    Had the same issue... I had a struct with public fields obviously. nothing in the grid. provided public getters, worked.

    0 讨论(0)
提交回复
热议问题