2011-11-17 18 views
8

Tengo un formulario simple de Windows que contiene, entre otros componentes, un objeto ListView llamado list. En el formulario, un botón me permite vaciar la lista al hacer clic con list.Items.Clear(). Esto funciona bienVaciar a ListView

Ahora tengo una clase separada Test, cuyo método update() se invoca en algunos eventos externos al formulario. En la construcción del formulario, paso una referencia a la lista usando el método SetList. En el modo de depuración, se llama al update() en los eventos que desencadenó y se ejecutó su contenido, pero mi lista no se borra.

¿Por qué es esto? La referencia está configurada correctamente, comprobé.

class Test 
{ 
    private ListView list; 

    public void setList(ListView list) 
    { 
     this.list = list; 
    } 

    public void update() 
    { 
     this.list.Items.Clear(); 
    } 
} 

cuando miro más de cerca a mi lista de ser modificada poniendo los puntos de interrupción en la actualización(), la lista se limpia y se mantiene limpia. Realmente parece que se está modificando otra lista, pero solo tengo una y nunca hago nada nuevo ... ????

+1

Si los elementos enlazados a través del origen de datos prueban 'list.DataSource = null; list.DataBind(); ' – sll

+0

Supongo que no es así. Siempre agrego a través del método this.list.Items.Add – Jerome

+3

El 95% de probabilidades con este tipo de código es que está borrando la vista de lista de otra instancia de formulario, una que no está visible porque la creó con new en lugar de usar la instancia de formulario visible. –

Respuesta

5

Utilice la update método siguiente modificación:

public void update() 
    { 
     this.list.Items.Clear(); 
     this.list.Update(); // In case there is databinding 
     this.list.Refresh(); // Redraw items 
    } 

Si esto no funciona, es evidente que se está modificando otra instancia del objeto list. En este caso, modifique temporalmente la declaración del objeto como a continuación y vea si cambia algo. Si lo hace, tendrá que revisar su código para asegurarse de que usted está despejando la instancia derecha de la lista:

private static ListView list; 
0

En mi caso, no estoy utilizando enlaces de datos, sino que agrega elementos de forma explícita en un bucle usando Agregar(). Me pareció que ListView.Clear() y ListView.Items.Clear() no funcionaban.

Resulta que ... el ListView fue en realidad borrado, pero no había estado borrando la lista de entrada, así que estaba limpiando y volviendo a poblar el ListView con los elementos borrados anteriormente.

A veces son las cosas más simples ... ¡OH!