将项目添加到列表然后将列表显示在组合框中

时间:2013-07-05 00:18:02

标签: c# wpf

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

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

Current WPF Form

所以上面是我的表单的一部分,安装的配置文件选择组合框列出了以Rameses-*开头的所有文件夹,然后列出它们。人们抱怨文件夹命名约定很糟糕,并希望更容易。因此,我希望能够列出存储在每个文件夹内的数据库中的名称,而不是使用文件夹名称,并让下拉框列出那些而不是文件夹名称。

我已经达到了可以让它显示单个文件夹配置文件名称的程度,但就是这样。此外,我能够列出所有名称,但是它们在一行上并且在组合框中一起被捣碎。

问题是我在代码中做错了什么。不确定问题究竟在哪里!要么我没有正确地向datalist添加项目,要么没有正确关闭循环。

这是我到目前为止所做的:

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();
}

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

2 个答案:

答案 0 :(得分:0)

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

profselect.ItemsSource = datalist;

(不是DataSource) 事实上它可能应该在循环之外

答案 1 :(得分:0)

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

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

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