2011-11-17 46 views
8

我有一個簡單的Windows窗體包含其他組件,一個ListView對象名爲list。在表單上,​​按鈕使我可以用list.Items.Clear()清空點擊列表。這工作正常。清空ListView

現在我有一個單獨的類Test,其方法update()在窗體外部的某些事件上被調用。在構建表格時,我使用SetList方法將參照傳遞給列表。在調試模式下,update()在我觸發的事件上被調用,並且它的內容被執行,但是我的列表沒有被清除。

這是爲什麼?這個參考資料是正確的,我檢查過。

class Test 
{ 
    private ListView list; 

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

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

當我仔細查看我的列表,通過在update()中放入斷點來修改列表時,list被清理並保持清理狀態。它真的好像是另一個被修改的列表,但我只有一個,並且從來沒有做過任何新的事情...... ????

+1

如果通過數據源綁定的項目嘗試'list.DataSource = null; list.DataBind();' – sll

+0

我的猜測是它不是。我總是通過方法添加this.list.Items.Add – Jerome

+3

這樣的代碼95%的可能性是,你正在清除另一個表單實例的列表視圖,這是不可見的,因爲你用新創建它而不是使用可見的表單實例。 –

回答

5

使用以下修改update方法:

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

如果這也不行,那你正在修改的list對象的另一個實例是顯而易見的。在這種情況下,請暫時修改下面對象的聲明並查看是否更改了任何內容。如果是這樣,你需要檢查你的代碼,以確保您清除列表的右邊的實例:

private static ListView list; 
0

就我而言,我不使用數據綁定,而是添加項目明確在使用Add()的循環中。在我看來,ListView.Clear()ListView.Items.Clear()不起作用。

原來...... ListView 實際上被清除了,但是我沒有清除輸入列表,所以我實際上清除了然後重新填充ListView和先前清除的項目。

有時候這是最簡單的事情...... D'OH!