时间:2016-02-15 22:04 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【ASP.NET GridView 实现课程表显示(动态合并单元格)实现步骤】,下面是详细的讲解!
ASP.NET GridView 实现课程表显示(动态合并单元格)实现步骤
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Text.RegularExpressions;
namespace DataBind
{
public partial class test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection con=DB.createCon();//创建连接对象
SqlDataAdapter sda=new SqlDataAdapter();
sda.SelectCommand=new SqlCommand("Select * from Schedule ", con);
DataSet ds=new DataSet();
sda.Fill(ds);
DataTable table=new DataTable();
table=ds.Tables[0];
DataTable dtSchedule=new DataTable();//此表用于存放转换后的课程表(格式与日常见到的一样)
//添加八列
dtSchedule.Columns.Add("课程表");
for (int i=1; i < 8; i++)
{
dtSchedule.Columns.Add("星期" + WeekConvertToChinese(i));
}
//添加八行
for (int i=0; i < 8; i++)
{
dtSchedule.Rows.Add();
}
//添加左侧固定信息(第几节课)
for (int i=0; i < 8; i++)
{
dtSchedule.Rows[i][0]="第" + ConvertToChinese(i+1) + "节";
}
//此数组用于存放需要合并的单元格信息。如:需要合并第一列的一、二单元格
//那么,数组中一行的三个数分别为1,1,2
int[][] tempArray=new int[table.Rows.Count][];
//数组初始化
for (int i=0; i < table.Rows.Count; i++)
{
tempArray[i]=new int[3];
for (int j=0; j < 3; j++)
{
tempArray[i][j]=0;
}
}
//遍历table,将每条课表信息填在tab中适当的位置。
for (int i=0; i < table.Rows.Count; i++)
{
//课是周几的课
string week=Convert.ToString(table.Rows[i]["Week"]);
//课开始时间
string startTime=Convert.ToString( table.Rows[i]["StartTime"]);
//课结束时间
string endTime=Convert.ToString(table.Rows[i]["EndTime"]);
for (int weekCount=1; weekCount < 8; weekCount++)//确定本条数据将来显示在哪一列
{
if (week==Convert.ToString(dtSchedule.Columns[weekCount].ColumnName))//跟星期做比较,确定数据应该写在那一列
{
tempArray[i][0]=weekCount;//记录星期(确定将来的数据显示在哪一列)
break;
}
}
for (int j=0; j < dtSchedule.Rows.Count; j++)//确定课程的开始时间和结束时间,并填写数据
{
string section=Convert.ToString( dtSchedule.Rows[j][0]);//当前行是第几节课
if (section==startTime)//判断课程开始时间,确定位置,填写数据
{
tempArray[i][1]=j;//记录上课开始时间(确定数据数据显示在哪一行)
dtSchedule.Rows[j][tempArray[i][0]]=Convert.ToString(table.Rows[i]["CourseName"]) + "<br />" +
Convert.ToString(table.Rows[i]["TeacherName"]);
}
if (section==endTime)//判断课程结束时间,记录位置
{
tempArray[i][2]=j;//记录课结束时间
break;
}
}
}
GridView1.DataSource=dtSchedule;
GridView1.DataBind();
//合并单元格
for (int i=0; i < table.Rows.Count; i++)
GroupCol(GridView1, tempArray[i][0], tempArray[i][1], tempArray[i][2]);
}
/// <summary>
/// 合并某列中的多个单元格
/// </summary>
/// <param name="GridView1"></param>
/// <param name="cols">要合并的那一列</param>
/// <param name="sRow">开始行</param>
/// <param name="eRow">结束行</param>
public static void GroupCol(GridView GridView1, int cols, int sRow, int eRow)
{
//if (GridView1.Rows.Count < 1 || cols > GridView1.Columns.Count - 1)
//{
// return;
//}
//if (GridView1.Rows.Count < 1 || cols > GridView1.Rows[0].Cells.Count - 1)
//{
// return;
//}
TableCell oldTc=GridView1.Rows[sRow].Cells[cols];
for (int i=1; i <=eRow - sRow; i++)
{
TableCell tc=GridView1.Rows[sRow + i].Cells[cols];
tc.Visible=false;
if (oldTc.RowSpan==0)
{
oldTc.RowSpan=1;
}
oldTc.RowSpan++;
oldTc.VerticalAlign=VerticalAlign.Middle;
}
}
string ConvertToChinese(int x)
{
string cstr="";
switch (x)
{
case 0: cstr="零"; break;
case 1: cstr="一"; break;
case 2: cstr="二"; break;
case 3: cstr="三"; break;
case 4: cstr="四"; break;
case 5: cstr="五"; break;
case 6: cstr="六"; break;
case 7: cstr="七"; break;
case 8: cstr="八"; break;
case 9: cstr="九"; break;
}
return (cstr);
}
//转换星期几
string WeekConvertToChinese(int x)
{
string cstr="";
switch (x)
{
case 1: cstr="一"; break;
case 2: cstr="二"; break;
case 3: cstr="三"; break;
case 4: cstr="四"; break;
case 5: cstr="五"; break;
case 6: cstr="六"; break;
case 7: cstr="日"; break;
}
return (cstr);
}
/// <summary>
/// 使得GridView中的内容可以换行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType==DataControlRowType.DataRow)
{
TableCellCollection cells=e.Row.Cells;
foreach (TableCell cell in cells)
{
cell.Text=Server.HtmlDecode(cell.Text); //注意:此处所有的列所有的html代码都会按照html格式输出,如果只需要其中的哪一列的数据需要转换,此处需要小的修改即可。
}
}
}
}
}
关于ASP.NET GridView 实现课程表显示(动态合并单元格)实现步骤的用户互动如下:
相关问题:
答: >>详细
相关问题:
答: >>详细
相关问题:
答: >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【asp】asp.net ubb使用代码-net-ubb使用
- 【页面打印】关于ASP.NET页面打印技术的常用方法
- 【MVC5】MVC 5 第一章 创建MVC 5 web应用程序-net
- 【MVC】一个简单MVC5 + EF6示例分享-EF6实例-MVC5
- 【服务器】asp.net页面状态管理cookie和服务器状
- 【asp】asp.net更新指定记录的方法-net--更新-指
- 如何取消.net后台线程的执行
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
