2

我正在开发一个 WPF 应用程序。它没有正确写入 ComboBox,我不确定为什么。

在 C 驱动器上,有许多标有 的文件夹Rameses-101Rameses-102依此类推。在每个文件夹中都有一个存储在 MDB 数据库中的配置文件。直到最近,我们才会重命名活动的“Rameses”文件夹以更改配置文件并对其执行工作。

当前 WPF 表单

所以上面是我的表单的一部分,安装的配置文件选择组合框列出了所有以开头的文件夹,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();
}

关于如何实现这一目标的任何建议?

4

2 回答 2

0

编辑:我将假设这个问题被错误标记为 WPF 并且实际上是关于 winforms 在这种情况下我的回答没有意义

profselect.ItemsSource = 数据列表;

(不是数据源),实际上它可能应该在循环之外

于 2013-07-05T00:49:09.377 回答
0

数据绑定应该在循环块之外。

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

很高兴听到它对你有用!8-)

于 2013-07-05T01:18:24.340 回答