2016-04-22 86 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;