2011-04-28 51 views
1

我有點不清楚下面的這麼清楚的事情了我的最終目標是創建一個按鈕來刪除在列表視圖中顯示的值,該值是一個列表項。鏈接Viewlist產品/列表中刪除所選的項目

這是那種我想要的東西......

studentList.Remove(listView1.SelectedIndices); 
refreshList(); 
當然

是否奏效,我會在天堂,但它拋出,當然錯誤...

名單private List<Student> studentList = new List<Student>()它是從另一個窗體生成的。

我在從正在使用的列表/視圖列表中刪除項目時出現問題。

這裏是一個不斷拋出的錯誤代碼:

private void buttonDelete_Click(object sender, EventArgs e) 
{ 
    // studentList.RemoveAt(listBoxStudent.SelectedIndex); 

    for (int i = 0; i < listView1.Items.Count; i++) 
    { 
     studentList.RemoveAt(listView1.Items[i].Selected)); 
     i--; 
    } 
    refreshList(); 
} 

值會被放進列表視圖正常,但我似乎無法找到一種方法來刪除列表視圖中的值與列表一起( refreshlist()清除和重新填充列表視圖根據列表studentList

private void refreshList() 
{ 
    listView1.Items.Clear(); 
    foreach (Student stu in studentList) 
    { 
     string[] filler = new string[5]; 
     filler[0] = stu.Name.ToString(); 
     filler[1] = stu.Residency.ToString(); 
     filler[2] = stu.Credits.ToString(); 
     filler[3] = stu.Tuition.ToString(); 

     listView1.Items.Add(stu.Id.ToString()).SubItems.AddRange(filler); 

     listView1.View = View.Details; 
    } 
} 

編輯:添加refreshlist()的要求。

+0

你可以添加你refreshlist()代碼?另外,爲什麼使用for循環刪除項目?特別是因爲在你的循環中,你正在否定你的i變量,所以它不會改變? – Mikecito 2011-04-28 04:15:16

+0

加入refreshlist(),我真的不知道最好的方法是刪除的項目是什麼,但它是可以選擇多個項目,所以這是我的理解是一個循環將需要一個列表視圖。對語言來說仍然是新的。 – Christopher 2011-04-28 04:20:40

+0

你的第一個循環包含'studentList.RemoveAt(..)'的目標是什麼? - 你只是想刪除選定的項目?如果是這樣,爲什麼循環? – BrokenGlass 2011-04-28 04:22:55

回答

2

克里斯,

哥們,剛剛從列表中刪除對象(忘記RemoveAt移除(指數) ),然後刷新視圖...它將(或至少它應該)從「模型」(即t他的學生名單)。

List.Remove方法:http://msdn.microsoft.com/en-us/library/cd666k3e.aspx

乾杯。基思。

+0

問題是從所選索引的列表中刪除項目...當我嘗試選擇索引時拋出錯誤 – Christopher 2011-04-28 04:19:22

+0

找出你的答案是最相關的 – Christopher 2011-04-28 05:17:59

2

試着改變你的循環,以

  for(int i = studentList.Items.Count -1; i>=0; i--) 
      { 
       if(studentList.Items[i].Selected == true) 
        studentList.Items[i].Remove(); 
      } 

或以其他方式

  foreach (ListViewItem lvi in studentList.Items) 
      { 
       if (lvi.Selected == true) 
        lvi.Remove(); 
      } 
+0

仍會引發錯誤。 – Christopher 2011-04-28 04:18:45

+1

+1反轉循環是擺脫索引跳躍問題的一種巧妙方式。 – corlettk 2011-04-28 04:19:16

+1

將刪除ListViewItem從底層studentsList中刪除學生?是的:這是一個問題。顯然我懷疑這不是好消息,但我不確定。 – corlettk 2011-04-28 04:40:00

1

你通常不會嘗試操縱兩者。修改底層數據源(在你的情況下,studentList),然後更新ListView。如果您修改您的studentList以使用ObservableCollection,它實際上會爲您更新UI。此外,如果您的集合的數據類型支持IComparable,則應該只能使用listView1.Remove()而不是RemoveAt()。

+0

如何從列表視圖中選擇項目雖然?Refreshlist將處理listView我只需要知道如何將目標選定的項目刪除在StudentList ... – Christopher 2011-04-28 05:07:42

0

你正在改變,你正試圖遍歷集合。一旦你已經刪除了第一個項目你已經改變了列表,以便for循環將會給你一個錯誤。給出的例子反向迭代(i--)是解決問題的一種方法。

+0

這沒有幫助:( – Christopher 2011-04-28 05:06:25

+1

你的意思是你爲什麼得到錯誤的消除沒有幫助或在集合中向後迭代並沒有幫助? – 2011-04-28 05:26:11

+0

通過集合迭代後字符。儘管謝謝你,但現在它已經工作了。 – Christopher 2011-04-28 05:53:09