手机版

ASP.NET网格视图中课程显示(动态合并单元格)的实现步骤

时间:2021-10-04 来源:互联网 编辑:宝哥软件园 浏览:

GridView,ASP .网中很常用的数据显示控件,这里,我将用这个控件来实现课程表的显示。首先说说课程表的显示与普通记录的显示有何不同?这里所说的普通记录是指直接从数据库中查询出来的、没有经过任何处理的记录。通常,我们用显示数据表格(一种控件)显示这些普通记录,只需直接将这些记录表绑定到显示数据表格(一种控件)中即可。但是,课程表的显示可不是这么简单,它需要将普通记录继续加工,需要根据记录中具体的数据来确定数据需要显示在哪一行、哪一列,而且需要根据课程开始时间和结束时间动态合并单元格,最后才是数据的显示。这就是课程表显示的难点之所在。好了,下面就看看我是如何实现的吧。aspx文件中代码:复制代码代码如下: %@页面语言=' c# ' AutoEventWireup=' true '测试前的代码=' test。aspx。cs“Inherits=”数据绑定。测试% % @注册程序集='微软.报告查看器。网络表单,版本=10.0.0.0,区域性=中性,publikeytoken=b03f 5 F7 f 11d 50a '命名空间='微软.报道。WebFORms "标记前缀="rsweb"%!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN ' ' http://www .w3。org/TR/XHTML 1/DTD/XHTML L1-过渡。DTD ' html xmlns=' http://www .w3。org/1999/XHTML ' head runat=' server ' title/title/head body form ID=' form 1 ' runat=' server ' div ASP 3360 GridView ID=' GridView 1 '文件中代码:复制代码代码如下:使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用系统网络。用户界面使用系统。网络控件;使用系统数据。SqlClient使用系统。数据;使用系统。文本。正则表达式;命名空间DataBind {公共分部类测试:系统.网络。ui。页面{受保护的无效页面_加载(对象发送方,事件参数e){ SqlConnection con=db。create con();//创建连接对象sqldatadapter sda=new sqldatadapter();sda .SelectCommand=新的SqlCommand('从计划中选择*,con);数据集ds=新数据集();sda .填充(ds);DataTable table=new DataTable();表=ds .表[0];DataTable dtSchedule=new DataTable();//此表用于存放转换后的课程表(格式与日常见到的一样) //添加八列dtSchedule .列。添加('课程表');for(int I=1;i8;i ) { dtSchedule .列。添加('星期weekconverttocchinese(I));} //添加八行for(int I=0;i8;i ) { dtSchedule .行。添加();} //添加左侧固定信息(第几节课)为(int I=0;i8;i ) { dtSchedule .行[i][0]='第转换中国(I ^ 1 '节;} //此数组用于存放需要合并的单元格信息。如:需要合并第一列的一、二单元格//那么,数组中一行的三个数分别为1,1,2 int[][] tempArray=new int[table .行数。计数][];//数组初始化for(int I=0;我在餐桌上。行。计数;I){ TempArray[I]=new int[3];for(int j=0;JBOY3乐队;j){ tempArray[I][j]=0;} } //遍历桌子,将每条课表信息填在标签中适当的位置。

for(int I=0;我在餐桌上。行。计数;i ) { //课是周几的课字符串周=转换. ToString(表。行[i]['周']);//课开始时间字符串开始时间=转换. ToString(表。行[I]['开始时间']);//课结束时间字符串结束时间=转换. ToString(表。行[I]['结束时间']);for(int Weekcount=1;weekCount 8;weekCount )//确定本条数据将来显示在哪一列{ if (week==Convert .ToString(dtSchedule .列[周数]。ColumnName))//跟星期做比较,确定数据应该写在那一列{ tempArray[I][0]=weekCount;//记录星期(确定将来的数据显示在哪一列)中断;} } for(int j=0;j dtSchedule .行。计数;j )//确定课程的开始时间和结束时间,并填写数据{字符串部分=转换ToString(dtSchedule .行[j][0]);//当前行是第几节课if (section==startTime)//判断课程开始时间,确定位置,填写数据{ tempArray[I][1]=j;//记录上课开始时间(确定数据数据显示在哪一行)dtSchedule .行[j][临时数组[i][0]]=转换. ToString(表。行[i]['CourseName']) 'br /' Convert .ToString(表第[I]行[' ticker name ']);} if (section==endTime)//判断课程结束时间,记录位置{ tempArray[I][2]=j;//记录课结束时间打破;} } } GridView1 .DataSource=dtScheduleGridView1 .DataBind();//合并单元格for(int I=0;我在餐桌上。行。计数;i ) GroupCol(GridView1,tempArray[i][0],tempArray[i][1],tempArray[I][2]);} ///摘要///合并某列中的多个单元格////summary///param name=' GridView 1 '/param///param name=' cols '要合并的那一列/param ///param name='sRow '开始行/param ///param名称='eRow '结束行/param public static void group col(GridView GridView 1,int cols,int sRow,int eRow) { //if (GridView1 .行数。计数1 ||列数GridView1 .列。count-1)//{//return;//} //if (GridView1 .行数。计数1 ||列数GridView1 .行[0]。细胞。count-1)//{//return;//} TableCell oldTc=GridView1 .行[sRow].单元格[cols];for(int I=1;I=eRow-sRow;i ) { TableCell tc=GridView1 .行[SrLoW I].单元格[cols];tc .可见=假;if (oldTc .RowSpan==0) { oldTc .行跨度=1;} oldTc .RowSpanoldTc .垂直对齐=垂直对齐.中间;} } string converttocchinese(int x){ string CSTR=' ';开关(x) { case 0: cstr='零;打破;案例1: cstr='一;打破;案例2: cstr='二;打破;案例3: cstr='三;打破;案例4: cstr='四;打破;案例5: cstr='五;打破;案例6: cstr='六;打破;案例7: cstr='七;打破;案例8: cstr='八;打破;案例9: cstr='九;打破;}返回(CSTR);} //转换星期几string weekconverttocchinese(int x){ string CSTR=' ';开关(x) { case 1: cstr='一;打破;案例2: cstr='二;打破;案例3: cstr='三;打破;案例4: cstr='四;打破;案例5: cstr='五;打破;案例6: cstr='六;打破;案例7: cstr='日;打破;}返回(CSTR);} ///摘要///使得显示数据表格(一种控件)中的内容可以换行////summary////param name=' sender '/param///param name=' e '/param protected void GridView 1 _ row data bound 1(对象发件人,GridView Roweventargs e){ if(e . row。行类型==数据控制行类型.DataRow){ TableCellCollection cells=e . row。细胞;foreach(单元格中的TableCell单元格){ cell .文本=服务器HtmlDecode(单元格。文本);//注意:此处所有的列所有的超文本标记语言代码都会按照超文本标记语言格式输出,如果只需要其中的哪一列的数据需要转换,此处需要小的修改即可。 } } } } } 最终显示效果

版权声明:ASP.NET网格视图中课程显示(动态合并单元格)的实现步骤是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。