2017-08-05 70 views
1

我想在C#中構建一個小型應用程序。用戶將在文本框中輸入並在單擊按鈕後,信息將顯示在列表視圖中。我的列表視圖有3列標題。我想在列表視圖中輸入唯一的單詞,如果信息已經存在,那麼消息框會顯示錯誤。一切都快完成了,但我得到了一個例外。不明白我錯過了什麼?如何在列表視圖中輸入唯一項目

ListViewItem item = new ListViewItem(); 
int serial = 1; 
private void saveBtn_Click(object sender, EventArgs e) 
{ 
    string code = codeTextBox.Text; 
    string name = nameTextBox.Text; 

    foreach (ListViewItem.ListViewSubItem subItem in item.SubItems) 
    { 
     if (subItem.Text == code) 
     { 
      MessageBox.Show("Code or Department name already exist"); 
      break; 
     } 
     else 
     { 
      item.Text = (serial.ToString()); 
      item.SubItems.Add(code); 
      item.SubItems.Add(name); 
      listView1.Items.Add(item); 
     } 
     serial++; 
    } 
} 

這裏是異常的詳細信息----

「不能添加或插入在多個地方的項目‘2’。你必須首先 從當前位置或克隆刪除它是。\ r \ n參數 名稱:項目「

+1

'但我得到了一個異常'你會發布異常的細節還是讓我們想象。 –

+0

以下是異常詳細信息------「不能在多個位置添加或插入項目'2',必須先將其從其當前位置移除或克隆。\ r \ n參數名稱:項目」 –

+0

@YousufYamin你需要爲列表創建一個新的'ListViewItem'。您的代碼正在重用最初創建的代碼。 – Nkosi

回答

2

使用System.LINQ來做到這一點。要好得多:

if (item.SubItems.Any(t => t.Text == code)) 
    MessageBox.Show("Code or Department name already exist"); 
else 
{ 
    ListViewItem item = new ListViewItem(); 
    item.Text = (serial.ToString()); 
    item.SubItems.Add(code); 
    item.SubItems.Add(name); 
    listView1.Items.Add(item); 
} 

您還需要爲每個新項目創建一個新的ListViewItem添加到列表中。原始代碼重複使用了相同的項目,該項目在添加到父項後無法添加兩次。