如何优雅地解决此出勤表问题?

时间:2011-04-14 14:54:25

标签: c# winforms linq collections datagridview

http://i.stack.imgur.com/gWWg4.png

基本上,我想显示所有学生的列表(在最左侧有他们的名字),每行(每个学生)显示在comboBox中选择的月份的每个日期。

我对如何解决这个问题感到很难过。

这是我到目前为止所拥有的:

//cmbMes is the combobox that holds each month to be selected.
private void cmbMes_SelectedIndexChanged(object sender, EventArgs e)
{
    dataGridView1.DataSource = null;
    int gradeParaleloId = Convert.ToInt32(cmbGradeParalelo.SelectedValue);
    var studentRepo = new StudentRepository();
    var students = studentRepo.FindAllStudentsFromGradeParalelo(gradeParaleloId);
    var rows = new List<DataGridViewRow>();

    foreach (var student in students)
    {
        DataGridViewRow newRow = new DataGridViewRow();
        newRow.SetValues(new object[] { "test", "test", "test" });
        rows.Add(newRow);
    }

    dataGridView1.DataSource = rows;
}

因此,出于测试目的,我在那里做了一点。它正在取得正确的学生,但是SetValues方法似乎没有做我认为应该做的事情。

enter image description here

此时我愿意接受建议。我只是这样做,因为我刚刚开始解决它。也许使用一些Linq-fu有更好的方法。

具体问题是,这是接近它的正确方法,创建DataGridViewRows的集合并将它们设置为.DataSource吗?

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

你可能想要这样的东西:

 var q = from i in new int[] { 1, 2, 3, 4, 5, 6, 7 }
                select new { Id = i, Name = "test" };
        dataGridView1.DataSource = q.ToList();

诀窍是属性名称被转换为列。您不需要在此处使用DataGridViewRow类型。