Использование списка в качестве источника данных для DataGridView - PullRequest
30 голосов
/ 25 июня 2011

Я извлек названия настроек и их соответствующие значения из файла конфигурации в упорядоченный словарь. Словарь содержит ключи и значения класса ICollection. Я хочу связать эти данные и отобразить их в DataGridView. Я пытался скопировать строки в массивы и отобразить эти массивы, но когда я запустил программу, столбцы были пустыми, и, похоже, они вообще не были связаны.

Я также пытался установить источник DataGridView непосредственно в одну упорядоченную коллекцию словарей (ключи или значения), но это также не привело к тому, что я хотел; колонны были еще пустыми. Тем не менее, третий столбец сделан с именем столбца как «длина» и отображает длину записей в ICollection. Но само собой разумеется, я не хочу длины, я хочу сами записи.

Вот код, который я использую для этого вопроса: при загрузке формы я загружаю файл конфигурации, и закрытый член с именем m_Settings имеет все пары ключ-значение. Затем я создаю список и добавляю ключи и значения отдельно. После установки источника привязки «data» я запускаю программу, и оба добавленных столбца остаются пустыми.

    private void Form4_Load(object sender, EventArgs e)
    {
        loadconfigfile(Properties.Settings.Default.Config);
        List<Object> data = new List<Object>();
        data.Add(m_Settings.Keys);
        data.Add(m_Settings.Values);
        bindingSource1.DataSource = data;
        dataGridView1.DataSource = bindingSource1;
        dataGridView1.Refresh();
    }

Есть какие-нибудь идеи относительно того, как я могу получить заказанный словарь и отобразить записи в двух столбцах с метками "Настройки" и "Значения"? Я считаю, что списки были совместимыми источниками данных для DataGridViews, но теперь я сам начинаю догадываться.

Любая помощь или направление очень ценится! Я буду рад предоставить больше информации, если это необходимо.

Спасибо!

EDIT

Вот пересмотренный код с реализованным классом myStruct:

    List<myStruct> list = new List<myStruct>();
    for(int index = 0; index < m_Settings.Count; index++)
    {
        myStruct pair = new myStruct(keys[index], values[index].ToString());
        list.Add(pair);
    }

    public class myStruct
    {
        private string Key { get; set; }
        private string Value { get; set; }

        public myStruct(string key, string value)
        {
            Key = key;
            Value = value;
        }
    }

Однако, когда я устанавливаю привязку DataDource в список, в DataGridView ничего не появляется, оно просто пустое. Кто-нибудь знает почему?

Ответы [ 3 ]

45 голосов
/ 25 июня 2011

Во-первых, я не понимаю, почему вы добавляете все ключи и значения для подсчета раз, индекс никогда не используется.

Я попробовал этот пример:

        var source = new BindingSource();
        List<MyStruct> list = new List<MyStruct> { new MyStruct("fff", "b"),  new MyStruct("c","d") };
        source.DataSource = list;
        grid.DataSource = source;

и это хорошо работает, я получаю два столбца с правильными именами. Тип MyStruct предоставляет свойства, которые механизм привязки может использовать.

    class MyStruct
   {
    public string Name { get; set; }
    public string Adres { get; set; }


    public MyStruct(string name, string adress)
    {
        Name = name;
        Adres = adress;
    }
  }

Попробуйте создать тип, который принимает один ключ и значение, и добавьте его один за другим. Надеюсь, это поможет.

6 голосов
/ 14 июля 2014

Установите свойство DataGridView

    gridView1.AutoGenerateColumns = true;

И убедитесь, что список объектов, которые вы привязываете, эти свойства объекта должны быть общедоступными.

0 голосов
/ 20 марта 2014

этот Func может вам помочь.он добавляет каждый объект списка в сетку

private void show_data()
        {
            BindingSource Source = new BindingSource();

            for (int i = 0; i < CC.Contects.Count; i++)
            {
                Source.Add(CC.Contects.ElementAt(i));
            };


            Data_View.DataSource = Source;

        }

Я пишу это для простого приложения базы данных

...