2014-12-15 3 views
0

У меня есть вид сетки данных в моем приложении C#. Когда я выделите строку, и я попал удалить, то строка будет удалена, но при запуске обновления и обновить команду я получаю индекс из исключения диапазонаИсключение DataGridViewRow за пределами допустимого диапазона при обновлении

private void btnDeleteMember_Click(object sender, EventArgs e) 
{ 
    foreach (DataGridViewRow item in this.dgvAllFaculty.SelectedRows) 
    { 
     int row = item.Index; 
     FacultyMember member = memberList[row]; 

     if (row >= 0) 
     { 
      memberList.RemoveAt(row); 

      Save(); 
      this.dgvAllFaculty.Update(); 
      this.dgvAllFaculty.Refresh(); 
      return; 
     } 

    } 
} 

При отладке я замечаю, что не будет работать на вызов обновления. Ошибка, которую я получаю:

System.IndexOutOfRangException: Index 1 does not have a value 
    at System.Windows.Forms.CurrencyManager.get_Item(Int32 index) 
    at 
System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError(Int32 rowIndex) 

Если есть что-то еще, что вам нужно, дайте мне знать. Мне интересно, когда, когда обновление происходит из-за его безумной причины, все еще думает, что есть второй ряд?

ответ

0

Хорошо, я немного изменил свой код и теперь его работаю. Перед обновлением мне пришлось перезагрузить данные из json-файла.

private void btnDeleteMember_Click(object sender, EventArgs e) 
    { 
     int count = this.dgvAllFaculty.SelectedRows.Count; 

     foreach (DataGridViewRow item in this.dgvAllFaculty.SelectedRows) 
     { 
      int i = item.Index; 
      FacultyMember member = memberList[i]; 
      memberList.RemoveAt(i); 
      Save(); 
     } 

     if (count > 1) 
     { 
      MessageBox.Show(String.Format("{0} faculty memebers deleted", count)); 
     } 
     else 
     { 
      MessageBox.Show("Faculty Member Deleted"); 
     } 

     // Load the newest data from file before refreshing the view 
     ViewAll_Load(sender, e); 
     this.Refresh(); 
    }