Liaison d’une liste générique à une zone de liste déroulante

J’ai une ComboBox et je veux y lier une liste générique. Quelqu’un peut-il comprendre pourquoi le code ci-dessous ne fonctionne pas? La source de liaison contient des données, mais elle ne remplit pas la source de données ComboBox.

FillCbxProject(DownloadData Down) { BindingSource bindingSource = new BindingSource(); bindingSource.DataSource = Down.ProjectList; cbxProjectd.DataSource = bindingSource; } 

Sur une note de côté: Est-il mauvais de faire circuler une instance d’une classe?

Merci!

Vous devez appeler la méthode Bind:

 cbxProjectd.DataBind(); 

Si cela concerne les winforms, vous devez vous assurer que votre nom est appelé, ce qui suit fonctionne:

 BindingSource bs = new BindingSource(); bs.DataSource = new List { "test1", "test2" }; comboBox1.DataSource = bs; 

Bien que vous puissiez définir le DataSource du ComboBox directement avec la liste.

Voici le moyen simple (cela fonctionne correctement):

 List my_list = new List(); my_list.Add("item 1"); my_list.Add("item 2"); my_list.Add("item 3"); my_list.Add("item 4"); my_list.Add("item 5"); comboBox1.DataSource = my_list; 
 BindingSource bs = new BindingSource(); bs.DataSource = getprojectname(); comboBox1 = new ComboBox(); comboBox1.DataSource = bs; 

Voici un moyen assez simple qui n’utilise pas BindingSource:

Tout d’abord, ajoutez la liste générique de chaîne, peut-être à une classe “consts / utils”:

 public static List Months = new List { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; 

Et voici comment vous ajoutez ces chaînes à une liste déroulante:

 comboBoxMonth.Items.AddRange(UsageRptConstsAndUtils.Months.ToArray()); 

En utilisant le code de Yuriy Faktorovich ci-dessus comme base, voici comment obtenir une liste de dates au format LongDateSsortingng pour un nombre de semaines donné et les affecter à une liste déroulante. Ceci utilise “lundi” mais vous pouvez simplement remplacer “lundi” par tout autre DOW qui convient à vos besoins:

 private void PopulateSchedulableWeeks() { int WEEKS_COUNT = 13; List schedulableWeeks = PlatypusUtils.GetWeekBeginnings(WEEKS_COUNT).ToList(); BindingSource bs = new BindingSource(); bs.DataSource = schedulableWeeks; comboBoxWeekToSchedule.DataSource = bs; } public static List GetWeekBeginnings(int countOfWeeks) { // from http://stackoverflow.com/questions/6346119/datetime-get-next-tuesday DateTime today = DateTime.Today; // The (... + 7) % 7 ensures we end up with a value in the range [0, 6] int daysUntilMonday = ((int)DayOfWeek.Monday - (int)today.DayOfWeek + 7) % 7; DateTime nextMonday = today.AddDays(daysUntilMonday); List mondays = new List(); mondays.Add(nextMonday.ToLongDateSsortingng()); for (int i = 0; i < countOfWeeks; i++) { nextMonday = nextMonday.AddDays(7); mondays.Add(nextMonday.ToLongDateString()); } return mondays; } 

... et, si vous souhaitez append la date réelle à la liste déroulante, vous pouvez également utiliser un dictionnaire similaire à celui-ci:

  int WEEKS_TO_OFFER_COUNT = 13; BindingSource bs = new BindingSource(); Dictionary schedulableWeeks = AYttFMConstsAndUtils.GetWeekBeginningsDict(WEEKS_TO_OFFER_COUNT); bs.DataSource = schedulableWeeks; comboBoxWeekToSchedule.DataSource = bs; comboBoxWeekToSchedule.DisplayMember = "Key"; comboBoxWeekToSchedule.ValueMember = "Value"; public static Dictionary GetWeekBeginningsDict(int countOfWeeks) { DateTime today = DateTime.Today; // The (... + 7) % 7 ensures we end up with a value in the range [0, 6] int daysUntilMonday = ((int)DayOfWeek.Monday - (int)today.DayOfWeek + 7) % 7; DateTime nextMonday = today.AddDays(daysUntilMonday); Dictionary mondays = new Dictionary(); mondays.Add(nextMonday.ToLongDateSsortingng(), nextMonday); for (int i = 0; i < countOfWeeks; i++) { nextMonday = nextMonday.AddDays(7); mondays.Add(nextMonday.ToLongDateString(), nextMonday); } return mondays; }