我想在DataGrid中显示如下信息 所有物理课成绩
姓名 第一次月考 第二次月考 .... 期中考试 ....
张三 98 96 .... 94 ....
李四 88 78 .... 90 ....
王二 91 96 .... 88 ....相关的表的设计
(成绩表)
id 学号 课程代号 成绩 考试代号
001 02001 101 98 01
002 02002 101 88 01
003 02003 101 91 01
004 02001 101 96 02
005 02002 101 78 02
006 02003 101 96 02
... ..... ......
115 02001 101 94 05
116 02002 101 90 05
117 02003 101 88 05
... ..... .....(课程表)
id 课程代号 课程名称
001 101 物理
002 102 数学
... ... ....(考试名称表)
id 考试代号 考试名称
001 01 第一次月考
002 02 第二次月考
... ... .....
005 05 其中考试我的问题就是在成绩表中,每一个同学的每一门课程有好几次考试,在DataGrid中每条记录显示某个学生的某门课程的几次的考试成绩,由于几次考试是几条记录,我怎么让他在DataGrid中作为一条记录显示出来?是不是表这样设计不合理呢?请求高手指点!多谢了!说明详细思路或给个例子,感激不尽!
姓名 第一次月考 第二次月考 .... 期中考试 ....
张三 98 96 .... 94 ....
李四 88 78 .... 90 ....
王二 91 96 .... 88 ....相关的表的设计
(成绩表)
id 学号 课程代号 成绩 考试代号
001 02001 101 98 01
002 02002 101 88 01
003 02003 101 91 01
004 02001 101 96 02
005 02002 101 78 02
006 02003 101 96 02
... ..... ......
115 02001 101 94 05
116 02002 101 90 05
117 02003 101 88 05
... ..... .....(课程表)
id 课程代号 课程名称
001 101 物理
002 102 数学
... ... ....(考试名称表)
id 考试代号 考试名称
001 01 第一次月考
002 02 第二次月考
... ... .....
005 05 其中考试我的问题就是在成绩表中,每一个同学的每一门课程有好几次考试,在DataGrid中每条记录显示某个学生的某门课程的几次的考试成绩,由于几次考试是几条记录,我怎么让他在DataGrid中作为一条记录显示出来?是不是表这样设计不合理呢?请求高手指点!多谢了!说明详细思路或给个例子,感激不尽!
我不考虑你表与表之间的复杂关系,你取出一个有[姓名],[考试名称],[成绩]的记录集(我估计这点你应该能用SQL语句搞定),然后
取得(考试名称表)中[考试名称]的distinct查询后的结果集,追加到DataTable的Columns中
这个DataTable用考生姓名做主键
读取时这样处理
(假定[姓名],[考试名称],[成绩]的顺序是0,1,2)
while(reader.Read())
{
string name=reader.GetString(0);
DataRow row=dataSet.xxxTable.FindBy[姓名](name);
if(row==null)
{
row = dataSet.xxxTable.NewxxxRow();
row.[姓名]=name;
dataSet.xxxTable.AddxxxRow(row);
}
row[reader.GetString(1)]=reader.GetXXXX(2);
}
怎么对应数据库中几条记录了?看不大明白其实你只要构建好需要的dataset就好了
“你取出一个有[姓名],[考试名称],[成绩]的记录集(我估计这点你应该能用SQL语句搞定),”这一步没有问题。
“取得(考试名称表)中[考试名称]的distinct查询后的结果集,追加到DataTable的Columns中”
是不是distinct查询后的结果集作为DataTable的列名啊?也就是DataTable的结构就是:
[姓名] [第一次月考] [第二次月考] .....[期中考试]....
若是这样,那怎么追加啊?
如果是这样了,那我们怎么把几条记录作为一条记录加到DataTable里
比如数据是这样的:
[姓名] [考试名称] [成绩]
张三 第一次月考 98
张三 第二次月考 95
张三 期中考试 94加到DataTable中就是:
[姓名] [第一次月考] [第二次月考] [期中考试]
张三 98 95 94
是用你给的那些代码吗?好象不行吧!
请教了!
以下为查询代码(测试通过): private void button1_Click(object sender, EventArgs e)
{
this.m_GridView.DataSource = this.GetGradeSet();
this.m_GridView.DataMember = "Grade";
}
public GradeSet GetGradeSet()
{
this.m_SqlConn.Open();
IDbCommand cmd = this.m_SqlConn.CreateCommand();
cmd.CommandText = "SELECT distinct exam from view_grade";
GradeSet dataSet = new GradeSet();
IDataReader reader=cmd.ExecuteReader();
while(reader.Read())
{
DataColumn column = new DataColumn();
column.ColumnName = string.Format("[{0}]", reader.GetString(0).Trim());
column.DataType = typeof(decimal);
dataSet.Grade.Columns.Add(column);
}
reader.Close();
cmd.CommandText = "select name,exam,grade from view_grade";
reader = cmd.ExecuteReader();
while (reader.Read())
{
string name = reader.GetString(0);
GradeSet.GradeRow row = dataSet.Grade.FindBy__姓名_ (name);
if (row == null)
{
row = dataSet.Grade.NewGradeRow();
row["[姓名]"] = name;
dataSet.Grade.AddGradeRow(row);
}
row[string.Format("[{0}]",reader.GetString(1).Trim())] = reader.GetDecimal(2);
}
reader.Close();
dataSet.AcceptChanges();
this.m_SqlConn.Close();
return dataSet;
}