winForms + привязка DataGridView к Списку <T>

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

34
задан Jesse 4 June 2013 в 18:30
поделиться

4 ответа

Свойство на сетке, Вы связываете с Кодом операции также?.. если Вы хотите связать непосредственно для Списка Вас, был бы просто DataSource = список. Привязки данных позволяют пользовательскую привязку. Вы пытаетесь сделать что-то другое, чем источник данных?

Вы получаете набор пустых строк? автоматические сгенерированные столбцы имеют имена? Вы проверили, что данные находятся в объекте (не просто 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;
    }

это должно хорошо работать...

14
ответ дан Quintin Robinson 27 November 2019 в 17:14
поделиться

Я не могу действительно сказать то, что Вы пытаетесь сделать с примером, который Вы включали, но связывающий с универсальным списком объектов довольно просто, если Вы просто хотите перечислить объекты:

    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;

    }

, Если Вы только хотите отобразить определенные свойства типа Списка, необходимо быть в состоянии сделать нежелательный столбец (столбцы) невидимым.

Технически, Вы не должны действительно создавать BindingSource, но я нахожу, что намного легче, когда я делаю обновления или изменения, если у меня есть он.

Hope это помогает.

5
ответ дан Jared 27 November 2019 в 17:14
поделиться

Имел ту же проблему... У меня была структура с общедоступными полями, очевидно. ничто в сетке. если общедоступные методы считывания, работавшие.

4
ответ дан 27 November 2019 в 17:14
поделиться

Еще одно решение, которое я нашел, - использовать коллекцию BindingList.



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;
}

У меня она отлично работает,

4
ответ дан 27 November 2019 в 17:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: