Har en ListView där det för tillfället finns två rader. Raderna adderas till ListViewn dynamiskt. När jag hämtar in en fil vars innehåll ska laddas i ListViewn vill jag, om det tidigare fanns rader i ListViewn, att dessa tas bort innan filens innehåll adderas till ListViewn. <b>Vad är det jag har missat?</b> eller om du tvunget ville använda den typen av loop som du körde - måste du räkna från sista posten och neråt... Dvs tills list.count == 0... Men tycker de andra lösningarna är snyggare - så kör på någon av dem. Ta bort alla rader från en ListView
Jag har följande kod för att radera och hämta ny data till ListViewn: public void OpenObjects()
{
if (fastPopulateLV.Items.Count > 0)
{
for (int i = 0; i < fastPopulateLV.Items.Count; i++)
{
fastPopulateLV.Items[i].Remove();
}
}
try
{
using (StreamReader objectFile = new StreamReader(fileName))
{
string row;
while ((row = objectFile.ReadLine()) != null)
{
ListViewItem openObject = new ListViewItem(objectFile.ReadLine());
openObject.SubItems.Add(objectFile.ReadLine()); //1
openObject.SubItems.Add(objectFile.ReadLine()); //2
openObject.SubItems.Add(objectFile.ReadLine()); //3
openObject.SubItems.Add(objectFile.ReadLine()); //4
openObject.SubItems.Add(objectFile.ReadLine()); //5
openObject.SubItems.Add(objectFile.ReadLine()); //6
openObject.SubItems.Add(objectFile.ReadLine()); //7
openObject.SubItems.Add(objectFile.ReadLine()); //8
openObject.SubItems.Add(objectFile.ReadLine()); //9
openObject.SubItems.Add(objectFile.ReadLine()); //10
openObject.SubItems.Add(objectFile.ReadLine()); //11
fastPopulateLV.Items.Add(openObject);
}
}
}
catch (IOException ex)
{
MessageBox.Show("Ett fel uppstod:\n" + ex);
}
}
Felet med denna koden är att den endast tar bort en rad (den första). Vad är det jag har missat?
Sv: Ta bort alla rader från en ListView
Det du gjorde fel var att i din for-loop så använde du villkoret fastPopulateLV.Items.Count.
Detta ändras ju för varje varv i loopen eftersom du tar bort en item. Så det blir knas!
Som sagt så är ju ListView.Items.Clear() det bästa, men om man skulle skrivit det själv kunde man gjort så här:
while (ListView.Items.Count > 0)
ListView.Items.RemoveAt(0);Sv:Ta bort alla rader från en ListView
/Emma