无法从DataGridView中删除行

时间:2016-04-22 10:33:32

标签: c# winforms data-binding binding

我在C#中编程。该程序是关于与之相关的学生的行。我有学生姓名列表,我将只使用一名学生iD并在数据网格视图中打印所有成绩。我无法做到这一点,它只是向我展示了所有学生成绩。我只需要专门打印一个学生的成绩。

   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();
            }

        }

    }

2 个答案:

答案 0 :(得分: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 :(得分:1)

您无需从网格或列表中删除元素。在这种情况下,您可以使用过滤。您可以使用linq过滤输入列表,并将过滤结果设置为DataSource的{​​{1}}:

DataGridView