Подтвердить что ты не робот

Использование списка в качестве источника данных для DataGridView

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

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

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

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

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

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

Спасибо!

ИЗМЕНИТЬ

Вот обновленный код с реализованным классом 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 ничего не отображается, оно просто пустое. Кто-нибудь знает, почему?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Задайте свойство DataGridView

    gridView1.AutoGenerateColumns = true;

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

Ответ 3

этот 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;

        }

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