2017-05-03 15 views
0

所以,我一直在學校項目中工作,我需要動態創建和添加東西到一個列表視圖第一次添加沒有任何問題,但是當它要添加第二個它崩潰。動態列表視圖有多個項目

這裏是代碼:

 lvwCarros.Columns.Clear(); 
     ListViewItem lvi = new ListViewItem(); 
     int idx, idx2; 
     lvwCarros.Columns.Add("Carro", 80, HorizontalAlignment.Center); 
     lvwCarros.Columns.Add("Ano", 60, HorizontalAlignment.Center); 
     lvwCarros.Columns.Add("Stand", 60, HorizontalAlignment.Center); 
     lvwCarros.Columns.Add("Localização do Stand", 120, HorizontalAlignment.Center); 
     for (idx = 0; idx < Program.Carros.Count ; idx++) 
     { 
      lvi.Text = Program.Carros[idx].Marca + " " + Program.Carros[idx].Modelo; 

      for (idx2 = 0; idx2 < Program.Matriculas.Count ; idx2++) 
      { 
       if (Program.Carros[idx].Matricula == Program.Matriculas[idx2].ID_Matricula) 
       { 
        lvi.SubItems.Add(Program.Matriculas[idx2].Ano_Emissão.ToString()); 
        for (int idx3 = 0; idx3 < Program.Stands.Count; idx3++) 
        { 
         if (Program.Carros[idx].Proprietario == Program.Stands[idx3].ID_Stand) 
         { 
          lvi.SubItems.Add(Program.Stands[idx3].Nome_Stand); 
          lvi.SubItems.Add(Program.Stands[idx3].Local_Stand); 
         } 
         lvwCarros.Items.Add(lvi); 
        } 
       } 
      } 
     } 

     lvwCarros.Visible = true; 
     lvwCarros.Enabled = true; 

非常感謝你提前:)

+0

調試時有什麼異常? –

+0

是的 在System.Windows.Forms.dll中發生未處理的System.ArgumentException類型的異常 –

+0

它說我不能在第二個地方插入第二個項目...第一我需要將它從當前位置或克隆它。 –

回答

0

基本上你的問題是,你需要LVI每次調用lvwCarros.Items.Add時間是一個新的對象()。嘗試放置一個「lvi =新的ListViewItem(第一個子項);」在最裏面的for循環的頂部。你只能將每個ListViewItem對象添加到ListView中 - 這就是爲什麼你會得到你的異常。

0

這是運行代碼。此代碼中有兩個問題:

  1. 每個要添加的列表項目都應該在for循環中實例化,因爲它會創建一個新項目。否則,您將一次又一次地添加相同的項目,並修改所有項目的值,如果其中一項改變,因爲它們將指向相同的項目。因此,如果要創建不同的列表視圖項,請將for循環中的行ListViewItem lvi = new ListViewItem();

  2. 您正在將listview項目lvi添加到內部for循環中,導致它將多次添加每個listitem。這就是爲什麼你收到錯誤。在最外面的for循環中移動此行,錯誤將消失。

    lvwCarros.Columns.Clear(); 
    
    int idx, idx2; 
    lvwCarros.Columns.Add("Carro", 80, HorizontalAlignment.Center); 
    lvwCarros.Columns.Add("Ano", 60, HorizontalAlignment.Center); 
    lvwCarros.Columns.Add("Stand", 60, HorizontalAlignment.Center); 
    lvwCarros.Columns.Add("Localização do Stand", 120, HorizontalAlignment.Center); 
    for (idx = 0; idx < Program.Carros.Count ; idx++) 
    { 
        /* You should initiate a new item in the loop if you want to add more*/ 
        ListViewItem lvi = new ListViewItem(); 
    
        lvi.Text = Program.Carros[idx].Marca + " " + Program.Carros[idx].Modelo; 
    
        for (idx2 = 0; idx2 < Program.Matriculas.Count ; idx2++) 
        { 
         if (Program.Carros[idx].Matricula == Program.Matriculas[idx2].ID_Matricula) 
         { 
          lvi.SubItems.Add(Program.Matriculas[idx2].Ano_Emissão.ToString()); 
          for (int idx3 = 0; idx3 < Program.Stands.Count; idx3++) 
          { 
           if (Program.Carros[idx].Proprietario == Program.Stands[idx3].ID_Stand) 
           { 
            lvi.SubItems.Add(Program.Stands[idx3].Nome_Stand); 
            lvi.SubItems.Add(Program.Stands[idx3].Local_Stand); 
           } 
    
          } 
         } 
        } 
        /*Moving it to outermost for loop*/ 
        lvwCarros.Items.Add(lvi); 
    } 
    
    lvwCarros.Visible = true; 
    lvwCarros.Enabled = true; 
    
相關問題