从图中可知,我们需要先从数据库查询出数据(数据库需要先存在数据)
数据库已经存在的数据
(表格)PW_Achievement (字段)UserID, EligibleTypeID, AchievementID, ExamNumber, Achievement, StTime, EnTime
(表格)PW_Student (字段) studentID, UserID, ClassID, GradeID, SpecialtyID, AcademeID, StudentName, StudentSex,StudentIDNum,StudentNumber
(表格)SYS_EligibleType (字段)EligibleType, EligibleTypeID, ScoreRange
(表格)SYS_Academe (字段) AcademeID,AcademeName
(表格)SYS_Grade (字段)GradeID,GradeName,AcademeID
(表格)SYS_Class (字段)ClassID ,GradeID,AcademeID,SpecialtyID,ClassName
数据查询代码
根据ID查询数据、多条件查询代码
将IEnumerable类型的集合 转换为DataTable类型
1、 定义要返回的DataTable对象
2、 保存列集合的属性信息数组
3、 使用反射获取T类型的属性信息,返回一个PropertyInfo类型的集合
4、 循环遍历集合,使用反射获取类型的属性信息foreach (T rec in varlist)
5、 新建一个用于添加到DataTable中的DataRow对象
6、 将具有结果值的DataRow添加到DataTable集合中
7、 返回DataTable对象
新建一个用于添加到DataTable中的DataRow对象
DataRow dr = dtReturn.NewRow();//新建一个用于添加到DataTable中的DataRow对象
foreach(PropertyInfo pi in oProps) { //循环遍历属性集合
dr[pi.Name] = pi.GetValue(rec, null) == null ? //为DataRow中的指定列赋值
DBNull.Value : pi.GetValue(rec, null);
}
dtReturn.Rows.Add(dr);//将具有结果值的DataRow添加到DataTable集合中
}
return dtReturn;//返回DataTable对象
为什么要将IEnumerable数据类型转换成DataTable数据类型?
查询相应的数据,该查询出的数据是属于数据集中的数据的,是IEnumerable类型的集合无法接收数据集内容,所以在打印前必须将IEnumerable数据类型转换为DataTable的数据类型
导出思路:
1、 创建Excel对象
2、 创建Excel中的sheet
3、 给sheet添加第一行表头标题
4、 使用循环语句给sheet每一行添加数据
5、 给Excel文件重新命名
6、 将Excel转换为文件流输出
将Excel转换为文件流输出
1、 定义文件流
2、 将sheet写入文件流
3、 输出之前seek(偏流量,游标位置)方法
4、 以文件类型返回数据
将Excel转换为文件流输出相关代码
MemoryStream BookStream = new MemoryStream();//定义文件流
book.Write(BookStream);//将sheet写入文件流
BookStream.Seek(0, SeekOrigin.Begin);//输出之前调用Seek(偏流量,游标位置)方法:获取文件流的长度
return File(BookStream, “application/vnd.ms-excel”, fileName); // 文件类型/文件名称
已存在代码
< select class=“form-control” id=“sltAcademe”> < /select>
< select class=“form-control” id=“sltClass”></ select>
< select class=“form-control” id=“sltGrade”>< /select>