2016-04-22 68 views
0

我使用C#編程。該程序是關於與之相關聯的學生的行。我有學生姓名列表,我將僅使用一個學生iD並在數據網格視圖中打印所有成績。我無法做到這一點,它只是向我展示所有學生的成績。我需要的僅僅是印刷一個學生的成績。無法刪除DataGridView中的行

private BindingList<StudentGrade> _studentGrade = new BindingList<StudentGrade>(); 

    public frmGrades(int studentID) 
    { 
     InitializeComponent(); 
     loadItemsFromFiles(); 

     dgvGrades.DataSource = _studentGrade; 

     string id = studentID.ToString(); 

     for (int z = 0; z < dgvGrades.Rows.Count;z++) 
     { 
      if (!dgvGrades.Rows[z].Cells["StudentID"].Value.ToString().Equals(id)) 
      { 
       dgvGrades.Rows.RemoveAt(z); 
       z--; 
       dgvGrades.Refresh(); 
      } 

     } 

    } 

回答

1

不允許在迭代相同的情況下修改集合;你可以做的是從綁定源刪除行,並再次將其綁定:即

// collecting rows that satisfies the condition 
var query = _studentGrade.AsEnumerable().Where(row => row.Field<string>("StudentID") == id); 

//deleting collected rows from the source 
foreach(var row in query.ToList()) 
    row.Delete(); 

// re assign the datasource 
dgvGrades.DataSource = _studentGrade; 
dgvGrades.Refresh(); 
1

您不必刪除從網格或列表元素。在這種情況下,你可以使用過濾。您可以使用linq過濾輸入列表,並將篩選結果設置爲DataSourceDataGridView

var filteredBindingList = new BindingList<StudentGrade>(
          _studentGrade.Where(x => x.StudentID == studentID).ToList()); 
dgvGrades.DataSource = filteredBindingList;