DataGridViewComboBoxColumn не отображается с пользовательским источником данных - PullRequest
0 голосов
/ 05 января 2012

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

//setup combobox
List<combo_automation_option> combo = new List<combo_automation_option>();
combo.Add(new combo_automation_option { id = "0", value = "None" });
combo.Add(new combo_automation_option { id = "*.0.5", value = "Once every 5 minutes" });

dgv_col_automation.HeaderText = "Automation";
dgv_col_automation.Name = "dgv_jobs_col_automation";
dgv_col_automation.FlatStyle = FlatStyle.Flat;
dgv_col_automation.DataSource = combo;
dgv_col_automation.ValueMember = "id";
dgv_col_automation.DataPropertyName = "value";

jobs_datagrid.Columns.Add(dgv_col_automation); 

Это нормально отображалось, когда я использовал настройки ниже для настройки моего поля со списком:

//setup combobox                        
dt_col_automation.HeaderText = "Automation";
dt_col_automation.Name = "dgv_jobs_col_automation";
dt_col_automation.Items.AddRange(
        "Once every 5 minutes",
        "Once every 10 minutes",
        "Once every 15 minutes",
        "Once every 30 minutes",
        "Once every hour",
        "Once every 2 hours",
        "Once every 3 hours",
        "Once every 4 hours",
        "Once every 5 hours",
        "Once every 6 hours",
        "Once every 7 hours",
        "Once every 8 hours",
        "Once every 9 hours",
        "Once every 10 hours",
        "Once every 11 hours",
        "Once every 12 hours",
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        "10",
        "11",
        "12",
        "13",
        "14",
        "15",
        "16",
        "17",
        "18",
        "19",
        "20",
        "21",
        "22",
        "23",
        "24"
    );

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

public struct combo_automation_option { 
   public string id;
   public string value;
}

Любой совет?

1 Ответ

2 голосов
/ 05 января 2012

Привязка данных не работает с полями класса / структуры, даже если они общедоступны.

Вместо этого вы должны использовать свойства, например ::100100

public struct combo_automation_option { 
   public string id {get; set;}
   public string value {get; set;}
}

Кроме того, если вы хотите показать что-то другое (например, значение) вместо идентификатора в выпадающем списке, установите также свойство DisplayMember.

Кстати, другие несколько предложений:

  • структуры должны использоваться только в случае крайней необходимости; используйте классы вместо
  • вы не следуете обычному соглашению об именах в c #: всегда указывать верблюжий регистр (без подчеркивания) и только структура / классы, методы, свойства должны начинаться с заглавной буквы.
...