2011-04-14 116 views
2

http://i.stack.imgur.com/gWWg4.png如何优雅地解决这个考勤表问题?

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

我有点难以解决这个问题。

这是我到目前为止有:

//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?

感谢您的建议。

回答

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类型。