Источник данных BindingList‹T› для DataGridView

У меня есть BindingList, который я хотел бы использовать для источника данных в представлении DataGrid.
Я добавил dataGridView1 и кнопку 1 в форму. Когда я нажимаю кнопку, в dataGridView ничего не отображается. Если я использую DataTable для источника данных, он работает нормально. Я должен упустить что-то простое.

public partial class Form1 : Form
{
    BindingList<ClassificationInfo> boundList;
    ClassificationInfo item;

    private void button1_Click(object sender, EventArgs e)
    {
        boundList = new BindingList<ClassificationInfo>();

        item = new ClassificationInfo();
        item.bExclude = 1;
        item.iColor = 123456;
        item.szDescription = "Test line 1";
        boundList.Add(item);    

        item = new ClassificationInfo();
        item.bExclude = 0;
        item.iColor = 7890123;
        item.szDescription = "Test line 2";
        item.iOrder = 2;
        boundList.Add(item);

        dataGridView1.DataSource = boundList;
    }    

    public class ClassificationInfo
    {
        public int iColor;
        public int iOrder;
        public string szDescription;
        public int bExclude;
    }
}

person DarwinIcesurfer    schedule 24.09.2010    source источник


Ответы (1)


Превратите общедоступные поля в ClassificationInfo в свойства.

public class ClassificationInfo 
{ 
    public int iColor { get; set; }
    public int iOrder { get; set; }
    public string szDescription { get; set; }
    public int bExclude { get; set; }
} 

DataBinding практически в каждом случае зависит от TypeDescriptor, который использует PropertyDescriptors для обнаруживать свойства. Поля игнорируются (как и должно быть - они должны быть инкапсулированы), поэтому ваша привязка данных не работает.

person Adam Sills    schedule 24.09.2010
comment
Это сработало. Спасибо. Как вы правильно оформили мой пост? Я думал, что разместил его между тегами кода, но весь блок кода не был выделен при публикации. - person DarwinIcesurfer; 24.09.2010
comment
Этот сайт не использует теги кода, не знаю, откуда вы это взяли. Пока вы редактируете сообщение, справа есть сводка того, что вы можете сделать, или вы просто нажимаете кнопку кода (1 и 0) в редакторе с выбранным кодом (форматирование кода — 4 пробела в начале линия). - person Adam Sills; 24.09.2010