2016-04-22 11 views
0

私はC#でプログラミングしています。このプログラムは、関連する学生の行に関するものです。私は学生名のリストを持っています。私は1人の学生だけを使って、データグリッドビューですべての成績を印刷します。私はそれをすることができません、それは私にすべての学生の成績を示しているだけです。私が必要とするのは、特に学生の成績のみを印刷することです。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; 
関連する問題