C#如何消除comboBox中的重复值?

时间:2016-05-05 17:51:56

标签: c# combobox duplicates oledbdatareader

我想从OleDbDataReader中删除重复项 应该很容易,但我正在旋转我的车轮。任何帮助将不胜感激!

        private void Database_Load(object sender, EventArgs e)
        {         
            try
            {
                connection.Open();
                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                string query = "select * from PPAPdatabase";
                command.CommandText = query;                

                OleDbDataAdapter da = new OleDbDataAdapter(command);
                dt = new DataTable();
                da.Fill(dt);
                dataGridView1.DataSource = dt;

                OleDbDataReader reader = command.ExecuteReader();
                while (reader.Read())
            {
                comboBox_Owner.Items.Add(reader["Owner"].ToString());                   
            }

2 个答案:

答案 0 :(得分:3)

重构您的SQL查询,如下所示:

select distinct Owner from PPAPdatabase

而不是

select * from PPAPdatabase

代码中唯一需要的列是Owner然后只获取一列并对其应用DISTINCT子句以获取该列的不同值。

或替换以下行:

OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    comboBox_Owner.Items.Add(reader["Owner"].ToString());                   
}

由此:

var owners = dt.AsEnumerable().Select(row => row["Owner"].ToString()).Distinct();
foreach(var owner in owners)
{
    comboBox_Owner.Items.Add(owner);                   
}

在此解决方案中,我们对您的数据库使用一个SQL查询,并重用结果以对不同的所有者进行反应。

答案 1 :(得分:2)

你可以这样做

while (reader.Read())
{
    if (!comboBox_Owner.Items.Contains(reader["Owner"].ToString()))
        comboBox_Owner.Items.Add(reader["Owner"].ToString());                  
}