2013-07-05 64 views
2

我正在開發WPF應用程序。它沒有正確寫入組合框,我不確定原因。將項目添加到列表中,然後讓列表出現在Combobox中

在C驅動器上有一些標記爲Rameses-101,Rameses-102等的文件夾。在每個文件夾中都有一個存儲在MDB數據庫中的配置文件。直到最近,我們將重命名活動的「Rameses」文件夾以更改配置文件並對其執行工作。

Current WPF Form

所以上面是我的形式的一部分,並且安裝配置文件選擇組合框列出了所有與Rameses-*啓動文件夾,然後列出。人們抱怨文件夾的命名規則很糟糕,並且希望更容易一些。因此,我希望能夠列出存儲在每個文件夾內的數據庫中的名稱,而不是使用文件夾名稱,而是使用下拉框列表而不是文件夾名稱。

我已經到了可以讓它顯示單個文件夾配置文件名稱的地步,但就是這樣。此外,我能夠列出所有的名字,但是他們在一行中,並且在組合框中混合在一起。

問題是我在做什麼錯在代碼中。不確定問題出在哪裏!要麼我沒有正確添加項目到數據列表或沒有正確關閉循環。

這是我到目前爲止有:

string directory = @"C:\"; 
string[] folders = Directory.GetDirectories(directory, "Rameses-*"); 
List<string> dataList = new List<string>(); 
foreach (string foldername in folders) 
{ 
    //var myDataTable = new System.Data.DataTable(); 
    using (var conection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;" + "data source=" + foldername + "\\Program\\Ramdata.mdb;Jet OLEDB:Database Password=****")) 
    { 
     conection.Open(); 
     var query = "Select u_company From t_user"; 
     var command = new System.Data.OleDb.OleDbCommand(query, conection); 
     var reader = command.ExecuteReader(); 
     while (reader.Read()) 
     { 
      //profselect.Text = reader[0].ToString(); 
      dataList.Add(reader[0].ToString()); 
     } 
     reader.Close(); 
     conection.Close(); 
    } 
    profselect.DataSource = dataList; 
    profselect.SelectedText = dataList.Last(); 
} 

就如何實現這一目標有什麼建議?

+0

不應該最後兩條語句'profselect.DataSource = dataList;'和'profselect.SelectedText = dataList.Last();'超出for循環塊嗎?顯然,DataSource在每次循環迭代中都被覆蓋。 –

+0

它做到了烏鴉。現在一切似乎都在起作用。愚蠢的我,我以爲他們一眼就看出來了。謝謝 !! –

回答

0

外的數據綁定應該環形塊外面去。

foreach(...) 
{ 
    ... 
} 
profselect.DataSource = dataList; 
profselect.SelectedText = dataList.Last(); 

很高興聽到它爲你工作! 8-)

+0

現在看到技巧來引用它被發現的文件夾。所以當選擇的配置文件將是數據庫中的名稱,如果他們點擊切換按鈕,那麼它將需要知道相應的文件夾,然後執行該過程.... –

0

編輯:我要承擔這個問題是錯誤標記爲WPF和實際上是關於的WinForms在這種情況下,我的答案是沒有意義的

profselect.ItemsSource =數據列表;

(沒有數據源) 而事實上它可能應該是循環

+0

掛上。 DataSource如何在WPF中編譯?這必須是winforms而不是WPF? – quarkonium

相關問題