2017-02-16 11 views
0

[UPDATE: Добавлен Form1() конструктора]Matching перечисление с полем со списком, кажется, не работает

Я пытаюсь соответствовать некоторым данным из определенного clases в значение в поле со списком окна формы приложения.

Что я сделал до сих пор выглядит следующим образом:

(Этот класс имеет некоторые region[] значения, которые я хочу хранить в выпадающий список, в зависимости от enum Project)

public Form1() 
{ 
    formatWorker.DoWork += worker_DoWork; 
    formatWorker.RunWorkerCompleted += worker_RunWorkerCompleted; 

    extractWorker.DoWork += extractWorker_DoWork; 
    extractWorker.ProgressChanged += extractWorker_ProgressChanged; 
    extractWorker.RunWorkerCompleted += extractWorker_RunWorkerCompleted; 

    InitializeComponent(); 
    projectBox.DataSource = Constant.projects.ToString(); 
    projectBox.SelectedIndex = (int)Regions.Project.NBTevo; 
    PopulateUsbDevices(); 
} 

class Regions 
{ 
    public enum Project 
    { 
     NBT = 0, 
     NBTevo = 1, 
     MGU = 2 
    } 

    string[] regions = { "ARG", "AUSNZ", "ECE", "IND", "ISR", "LA", "ME", "NA", "NAF", "NANT", "PAL", "SEA", "TC", "ZA" }; 

    public string[] GetRegionsForProject(Project proj) 
    { 
     //all directories from /Databases/proj[i] 
     string[] allDirectories = Constant.ExtractFileNames(Directory.GetDirectories(Constant.path + "//" + Constant.projects[(int)proj])); 


     string[] availableSubDirectories = Enumerable.Intersect(allDirectories, regions).ToArray(); 

     return availableSubDirectories; 
    } 
} 

Следующий класс магазины определенный шаблон файлов

class DBVersion 
{   
    public string[] GetVersion(string proj, string region) 
    { 
     string pattern = "^" + proj + "_" + region + "_" + @"(\d+\.\d+\.\d+_[a-zA-Z0-9_]+)\.iso$"; 
     string[] files = Directory.GetFiles(Constant.path + "\\" + proj + "\\" + region + "\\images\\", "*.iso", SearchOption.AllDirectories); 
     return files; 

    } 
} 

Я пытаюсь построить зависимость, например, в зависимости от выбранных значений в projectBox и regionBox некоторые версии будут появляться в versionBox

private void projectBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    isoPaths.Clear(); 
    populateRegions((Regions.Project)Enum.Parse(typeof(Regions.Project), projectBox.SelectedValue.ToString())); 
    regionBox.SelectedIndex = 0; 
    regionBox_SelectedIndexChanged(null, null); 
} 

private void regionBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string[] versionPaths = version.GetVersion(projectBox.SelectedValue.ToString(), regionBox.SelectedItem.ToString()); 

    isoPaths.Clear(); 
    isoPaths.AddRange(versionPaths); 

    populateVersions(Constant.ExtractFileNames(versionPaths)); 
    //versionBox.SelectedIndex = 0; 
    //versionBox_SelectedIndexChanged(null, null); 
} 

private void versionBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 

} 
private void populateRegions(Regions.Project proj) 
{ 

    this.regionBox.DataSource = region.GetRegionsForProject(proj); 
} 

private void populateVersions(string[] versions) 
{ 
    this.versionBox.DataSource = version.GetVersion(
        projectBox.SelectedItem.ToString(), 
        region‌​Box.SelectedItem.ToS‌​tring()); 
} 

После запуска, я не имею ничего хранить в ComboBox

+0

Я не вижу кода, в котором вы заполняете свои списки или привязываете его к «DataSource». Может быть, мои глаза слишком устали. –

+0

Вы правы. Это то, что я не знаю, как это сделать, извините за неясность –

+0

У меня есть два метода: 'private void populateRegions (Regions.Project proj) { this.regionBox.DataSource = region.GetRegionsForProject (proj) ; } private void populateVersions (string [] versions) { this.versionBox.DataSource = version.GetVersion (projectBox.SelectedItem.ToString(), regionBox.SelectedItem.ToString()); } 'но я не могу представить их вместе –

ответ

1

Если вы хотите привязать DataSource к ComboBox вы должны использовать:

Объект, который реализует интерфейс IList или массив

по ComboBox.DataSource Property documentation

Так эта линия в конструкторе Form1:

projectBox.DataSource = Constant.projects.ToString(); 

должен быть изменен в этом:

projectBox.DataSource = Constant.projects; 

Остальные Наример пуст, так как проблема каскады от одного к другому. Если один из них пуст, то остальные не могут быть заполнены должным образом.

 Смежные вопросы

  • Нет связанных вопросов^_^