接上篇文章《动态生成Table》,这篇内容差不多,只是上篇是把查出来的数据直接绑定到Table控件上,而这篇则是把查出来的数据放在了DataTable中,然后就可以将DataTable绑定到GridView控件上,或者Repeater控件上.
首先是前台代码,就是增加了一个GridView控件,连名都没改.
<form id="form1" runat="server">
<div><asp:Label ID="Label1" runat="server" Text="Label">学号请输入1或2;姓名请输入小红或小蓝</asp:Label> </div>
<asp:RadioButton ID="rbnStuNo" runat="server" GroupName="tbTest1" Text="学号" />
<asp:RadioButton ID="rbnStuName" runat="server" GroupName="tbTest1" Text="姓名" />
<asp:TextBox ID="txtQuery" runat="server"></asp:TextBox>
<asp:LinkButton ID="lbtQuery" runat="server" OnClick="lbtQuery_Click1">查询</asp:LinkButton>
<asp:Table ID="tbTest" runat="server">
</asp:Table>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
</form>
后台代码,也就是增加了一个方法.叫bindGridView,基本内容和bind方法差不多.其实就是把bind中的内容复制粘贴,然后修修改改,就可以了.
//动态生成dt,绑定到gridview上
private void bindGridView(string strWhere)
{
//获取小蓝的成绩,
//查询学生信息表,获取学生的信息,包括学生,姓名和年级
string strSql = "select * from T_Stu where " + strWhere;
DataTable dt = QueryScore(strSql);
//获取小蓝的年级和学号
int grade = int.Parse(dt.Rows[0]["grade"].ToString());
string stuNo = dt.Rows[0]["stuNo"].ToString();
//获取课程数
string strSql1 = " select * from T_Course";
//获取课程数和课程信息(课程编号,课程名)
DataTable dtCourse = QueryScore(strSql1);
int intCourseNum = dtCourse.Rows.Count;
DataTable dT = new DataTable();
//根据查询出来的数据行数和count,确定table
for (int i = 0; i < grade; i++)
{
//构建表头
if (i == 0)
{
//实例化DataTable和DataColumn
//第一列
DataColumn dC = null;
//第一列的列标题,以及第一列的数据类型
dC = dT.Columns.Add("科目", Type.GetType("System.String"));
//第二,三,四类的列标题
for (int r = 0; r < intCourseNum; r++)
{
//语文,数学,英语
dC = dT.Columns.Add(dtCourse.Rows[r]["courseName"].ToString(), Type.GetType("System.String"));
}
//最后一列的列标题
dC = dT.Columns.Add("总分", Type.GetType("System.String"));
}
//建立其他行
if (i >= 0)
{
//第一行数据
DataRow tR;
tR = dT.NewRow();
//第一列数据开始赋值第一年,第二年
tR["科目"] = "第" + (i + 1) + "年";
//第二列,第三列,第四列,(语文,数学,英语的分数)
for (int r = 0; r < intCourseNum; r++)
{
//拼凑Sql语句,查询小蓝第i年的某科目的分数
string strSql2 = "select * from T_Score where ";
strSql2 = strSql2 + "stuNo='" + stuNo + "'";
strSql2 = strSql2 + " and courseNo='" + dtCourse.Rows[r]["courseNo"] + "'";
strSql2 = strSql2 + " and stuYear='" + (i + 1) + "'";
DataTable dtScore = QueryScore(strSql2);
//获取到分数
tR[dtCourse.Rows[r]["courseName"].ToString()]=dtScore.Rows[0]["score"].ToString();
}
//最后一列汇总
string strSql3 = "select sum(cast(score as int)) from T_Score where stuNo='" + stuNo + "' and stuYear='" + (i + 1) + "'";
DataTable dtSum = QueryScore(strSql3);
tR["总分"] = dtSum.Rows[0][0].ToString();
//把一行添加到DataTable中
dT.Rows.Add(tR);
}
//绑定到GridView上
GridView1.DataSource = dT;
GridView1.DataBind();
}
}
最后的运行效果图,如下,就是分别输入了学号1,2然后查询,出来的结果,和上篇的效果是一样一样的.