2012-03-13 171 views
6

Tengo que eliminar duplicados en un cuadro combinado.Eliminar duplicados en comboBox

private void cbnama_Click(object sender, EventArgs e) 
{ 
    List<string>[] list; 
    list = mDatabase.Viewpengujian(); 

    cbnama.Items.Clear(); 
    for (int i = 0; i < list[0].Count; i++) 
    { 
      cbnama.Items.Add(list[0][i]); 
    } 
} 

Ejemplo:

test1 
test2 
test2 
test3 
test3 
+1

¿Estás sacando esto de una base de datos, entonces sería bueno sacar lo distinto desde allí? – V4Vendetta

Respuesta

5

Actualización: No se dio cuenta que tenía una lista multidimensional. @ntziolis es el primero en captar eso y su respuesta es la correcta.

Si estás usando C# 3.0 o posterior que podría hacer:

list = list.SelectMany(i => i).Distinct().ToList(); 

Asegúrese de que tiene using System.Linq en la parte superior.

+0

Estoy usando C# 4.0 – bessie

+0

Esto no compilará porque Distinct devolverá un IEnumerable <>, tienes que lanzar: list.Distinct() .ToList() – KrazZ88

+0

acaba de darse cuenta de que usa múltiples dimensiones en la lista, por lo que simplemente llamar a 'Distinct'is no funciona aquí, necesita' SelectMany' antes de eso, ver mi respuesta – ntziolis

2

u necesidad de comprobar objeto ya añadido o no como abajo, shich omitir el elemento que ya se añade en cuadro combinado

for (int i = 0; i < list[0].Count; i++)  
{     

    if (!comboBox1.Items.Contains(list[0][i])) 
    { 
     cbnama.Items.Add(list[0][i]);  
    } 
} 
+0

uno debe evitar el uso de elementos UI para comprobar algo como esto, generalmente hay una sobrecarga significativa cuando se utiliza un elemento UI en lugar de una estructura de datos ligera como una matriz, tampoco es separar el código y la interfaz de usuario correctamente – ntziolis

0

Sólo tienes que comprobar este ejemplo .... y manipularla como por ur necesidad. ..

For i As Int16 = 0 To Me.ComboBox1.Items.Count - 2 
    For j As Int16 = Me.ComboBox1.Items.Count - 1 To i + 1 Step -1 
      If Me.ComboBox1.Items(i).ToString = Me.ComboBox1.Items(j).ToString Then 
       Me.ComboBox1.Items.RemoveAt(j) 
      End If 
    Next 
Next 
2

En general esto puede ser resuelto mediante el método Distinct extensión del IEnumerable, ver aquí:
http://msdn.microsoft.com/en-us/library/bb348436.aspx

Pero dado que está utilizando un multi dimensional cosa lista/matriz que necesita SelectMany para aplanar sus dimensiones antes de poder llamar Distinct, esto también cambia el resto de su código ligeramente de modo que aquí es el método del agujero:

private void cbnama_Click(object sender, EventArgs e) 
{ 
    // this will give you an IEnumerable<string> 
    var list = mDatabase.Viewpengujian() 
     .SelectMany(i => i) 
     .Distinct(); 

    cbnama.Items.Clear(); 

    // since now list is a IEnumerable<string> you can just loop through it 
    foreach (var item in list) 
    { 
     cbnama.Items.Add(item); 
    } 
} 
Cuestiones relacionadas