2016-07-29 89 views
0

我有一个WFA,我用它来即时还原数据库。现在我有一个列表框,显示目录中的所有备份,但它也包含我想要访问的文件夹。下面是列表框代码:如何根据组合框选择更改列表框的内容?

private void PopulateListBox() 
{ 
    try 
    { 
     var dinfo = new DirectoryInfo(@"C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup"); 
     var files = dinfo.GetFiles("*.bak"); 

     foreach (var file in files) 
     { 
      listBox1.Items.Add(file.Name); 
     } 
    } 
    catch (Exception) 
    { 
     MessageBox.Show("The application could not find the directory to populate the List Box."); 
    } 
} 

目前,我有一个组合框设置在备份来显示不同的文件夹:

private void PopulateComboBox() 
{ 
    string[] directory = Directory.GetDirectories(@"C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup"); 

    foreach (string folder in directory) 
    { 
     comboBox1.Items.Add(folder); 
    } 
} 

我所试图做的是改变的内容当我点击组合框中的不同目录时列表框。我创建了一个方法来实现我想要做的事情,但我不确定如何编写它。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
     listbox1.Clear() 
     //rest of the code would go here  
} 

如何根据我在组合框中选择的内容来显示列表框中每个目录的内容?

+1

作出这样的文件夹,并扩展到全局变量,所以你的SelectedIndexChanged功能可与组合框的的SelectedValue的基本路径结合起来,并从获取的文件。 – Nyerguds

回答

1

我更喜欢WPF的人,但我很肯定它在这里的工作原理是一样的。

您想要处理“SelectionChanged”事件之一(SelectedIndexChanged,SelectedValueChanged或SelecitonChangeCommitted),并且在处理程序中您将代码检查组合框中选定的项目,并根据该选择重新填充列表框。

+0

我将您的解决方案标记为答案,并添加了我在下面所做的,感谢您的帮助! – BowerdotJson

1

这应该工作。

a)使你的populateListBox函数接受一个参数 “DINFO”

private void PopulateListBox(string dname) 
{ 
    try 
    { 
    listBox1.Clear(); 
    var dinfo = new DirectoryInfo(@"C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\" + dname); //combine base folder with the folder from combobox 
    var files = dinfo.GetFiles("*.bak"); 

    foreach (var file in files) 
    { 
     listBox1.Items.Add(file.Name); 
    } 
} 
catch (Exception) 
{ 
    MessageBox.Show("The application could not find the directory to populate the List Box."); 
} 

}

b)中在你的SelectedIndexChanged方法中,从组合框中传递选定值输入到PopulateListBox功能:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    PopulateListBox(comboBox1.SelectedValue); 
} 
+0

我很接近这一点,但我不得不做出一些改变。在populateListBox函数中,字符串不得不变成变量,现在它不能解析符号'GetFiles'。我还必须在PopulateListBox方法中添加.ToString()。 – BowerdotJson

+0

@BowerdotJson对不起刚刚意识到我的错误 - 现在纠正。根据您的解决方案,您可能需要为“备份”做一个特例,因为它是基础文件夹本身,而不是子文件夹。但我认为一次编码基本文件夹比3次更好。同样在你的你必须编写更多的代码,如果文件夹列表发生变化,我认为我的封装更好 - 与列表框的事情是在列表框功能,而不是部分在组合框事件。 – ADyson

+1

我明白你的意思了。如果需要的话,我会再次回到这里,目前我是唯一一个使用此应用程序的人,所以如果我需要进行更改,我一定会回到这个解决方案。谢谢您的反馈! – BowerdotJson

0

我最终提出了基于Yushatak的回应的自己的解决方案。我创建了一个指向备份文件夹的全局字符串变量(这是应用程序启动时的默认目录),在组合框UI的属性中创建了一个集合,删除了我创建的组合框函数(因为它不再需要),然后在SelectionIndexChanged方法内部使用一系列If语句来处理我想要访问的文件夹。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (comboBox1.SelectedItem == "Backup") 
    { 
     string backup = @"C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup"; 
     PopulateListBox(backup); 
    } 
    else if (comboBox1.SelectedItem == "Backups 2") 
    { 
     string backup = @"C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\Backups 2"; 
     PopulateListBox(backup); 
    } 
    else if (comboBox1.SelectedItem == "Backups 3") 
    { 
     string backup = @"C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\Backups 3"; 
     PopulateListBox(backup); 
    } 
} 
相关问题