2016-07-29 83 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); 
    } 
} 
相關問題