2017-05-08 43 views
-1

我有一個文本文件:TEXTFILE到ListView的線由線c#

我有僅1列一個ListView。我想讓ListView顯示與文本文件完全相同的內容。我已經使用這個代碼:

int counter = 0; 
string line; 
ListViewItem lv = new ListViewItem(); 
System.IO.StreamReader file = new System.IO.StreamReader("cacchuongtrinhchan.txt"); 
while ((line = file.ReadLine()) != null) 
     { 
      lv.Text = line.ToString(); 
      listView1.Items.Add(lv); 
      counter++; 
     } 

但問題是,有一個例外:

System.ArgumentException:在多個地方「不能添加或插入項目'。您必須先將其從當前位置移除或克隆。

回答

2

ListViewItem lv = new ListViewItem();放在循環內部爲每一行創建新的ListViewItem

int counter = 0; 
string line; 

System.IO.StreamReader file = new System.IO.StreamReader("cacchuongtrinhchan.txt"); 
while ((line = file.ReadLine()) != null) 
{ 
    ListViewItem lv = new ListViewItem(); 
    lv.Text = line.ToString(); 
    listView1.Items.Add(lv); 
    counter++; 
} 
1

你得到這樣的錯誤,因爲你是在每次迭代中添加的ListViewItem的同一個實例,即使你改變了自己的價值。所以你需要做的是在每個迭代中用新實例實例化lv。下面的代碼將幫助你做同樣的事情。仔細查看該代碼段並讓我知道它是否對您有幫助。

while ((line = file.ReadLine()) != null) 
{ 
    ListViewItem lv = new ListViewItem(); 
    lv.Text = line.ToString(); 
    listView1.Items.Add(lv); 
    counter++; 
} 
1

爲什麼不使用ReadAllLines並將所有內容壓縮爲一行?這假設listView1.ItemsList<string>,如果它是一個數組(string[]),則刪除ToList()調用。

頂部代碼文件的

using System.IO; 
using System.Linq; 

方法的身體

listView1.Items = File.ReadAllLines("cacchuongtrinhchan.txt").ToList();