2016-12-27 7 views
0

Я использую этот метод, и он продолжает говорить, что у listView1 есть элементы, хотя ни один из них не отображается в списке?C# ListViewItems не возвращается пустым

 private void button8_Click(object sender, EventArgs e) 
    { 
     string filePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\test.txt"; 
     if (Directory.Exists(filePath)) 
     { 
      listView1.Items.Clear(); 

      using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) 
      { 
       using (TextReader sr = new StreamReader(fs)) 
       { 
        string line; 
        while ((line = sr.ReadLine()) != null) 
        { 
         string[] data = line.Split(new char[] { ',' }); 
         ListViewItem lvi = new ListViewItem(); 

         if (listView1.Items.Count > 0) 
         { 
          MessageBox.Show("ListViewCount#1: '" + listView1.Items.Count + "'."); 
         } 

         lvi.Text = data[0]; 
         lvi.SubItems.Add(data[1]); 
         lvi.SubItems.Add(data[3]); 
         lvi.SubItems.Add(data[4]); 
         lvi.Tag = data[2]; 

         listView1.Items.Add(lvi); 

         if (listView1.Items.Count > 0) 
         { 
          MessageBox.Show("ListViewCount#2: '" + listView1.Items.Count + "'."); 
         } 
        } 
       } 
      } 
      if (listView1.Items.Count == 0) 
      { 
       MessageBox.Show("ERROR: ListView has no data to show."); 
       return; 
      } 
     } 
    } 

listView1.count больше 0 после «LVI» части, до этого он пуст (проверено с MessageBox подсчета ListView1 до и после этого метода), почему это говорить оно имеет «ListView1 .count 1 ", если все" данные "пустые? Я пробовал другие способы обойти это, используя пользовательские логические значения в других методах, но его просто нецелесообразно ссылаться на них, все, что я хочу сделать, - это если listview1 равен 0, сообщите пользователю, что данных нет.

+0

Каков вклад для вашего 'StreamReader'? Возможно ли, что вход представляет собой файл с только символом новой строки? –

+0

Можете ли вы добавить отсутствующий код? Где создается экземпляр 'listView1'? – kat1330

+0

Непонятно, что вы просите. Также такие вопросы нуждаются в [MCVE] –

ответ

0

Вы должны быть инициализированы вы ListView ранее в коде, чтобы не получить сообщение об ошибке выполнения на:

listView1.Items.Add(lvi); 

инстанциации ListView создаст пустой ListView с отсчетом от 0, таким образом, пролетая мимо, если декларация.

Смежные вопросы