资源描述:
《电大计算机毕业论文在asp.net的dropdownlist中完美实现动态显示多列数据》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、在ASP.NET的DropDownList中完美实现动态显示多列数据论文摘要:为了使DropDownList能够动态显示多列数据,需要通过三个步骤:一是通过语句读取相关列数据,二是通过语句合成各列定长的多列项,三是为DropDownList设置特定的字体字号。论文关键词:动态显示,多列数据 一、引言 一般情况下,DropDownList/ListBox仅显示一列数据。但在某些特殊场合,如果一个选项能够同时显示若干列相关数据,则会使数据更直观、选择更方便、能更好的满足用户的使用需要。 以图1为例,这是一个本科生毕业(设计)论文选题页面。
2、在此页面中,有三个DropDownList控件,它们可以动态的显示多列数据。通过多列相关数据的同时显示,学生在做出选择前,可以动态的了解到某一选题当前已被其它同学选择的情况,从而更合理的进行“预选”à“终选”,较好的避免了学生选题的“扎堆”现象。 图1在DropDownList中动态显示多列数据示例 在桌面程序设计语言中,PowerBuilder通过DataWindow控件实现了此种功能,但目前常用的网页设计语言中,尚未发现可供使用的此类控件。可以通过一个DropDownList再配合一个表格类控件实现和选项相关的多项信息的同时显示,虽
3、然这样可以“曲线救国”,但应用效果却会大打折扣。 因此,在动态网页设计时,研究如何使DropDownList中完美实现动态显示多列数据很有必要。本文以图1所示网页为例,介绍在ASP.NET的DropDownList中完美实现动态显示多列数据的方法。 二、数据准备 本例程序为一个学生选题网页,在此网页中,列出了所有指导教师的所有研究方向,供学生选择,所有学生填写志愿完毕,教师才可以根据学生选题情况,确定要指导的学生。类似的例子有于高考网上填写志愿、网上投票等。 图2列出了三个与本网页相关的数据表:题目表用于存储所有教师的所有选题,选题
4、表用于存储所有学生的选题结果,每人限选三个,教师表用于存储所有教师的相关情况。 图2网页相关数据表 在显示选题数据前,首先需要通过SQL语句从三个数据表中生成相关数据,具体的SQL语句比较复杂,也是编写本网页的关键语句之一,故在此给出,以供参考(见图3)。 SELECT导师姓名,题目,要求,SUM(IIF(志愿号=1,人数,0))AS第一志愿人数,SUM(IIF(志愿号=2,人数,0))AS第二志愿人数,SUM(IIF(志愿号=3,人数,0))AS第三志愿人数FROM(SELECT题目表.编号,教师表.姓名AS导师姓名,题目表.题
5、目,题目表.要求,选题表.志愿号,COUNT(*)AS人数FROM((题目表LEFTOUTERJOIN教师表ON题目表.导师编号=教师表.编号)LEFTOUTERJOIN选题表ON题目表.编号=选题表.题目号)GROUPBY题目表.编号,教师表.姓名,题目表.题目,题目表.要求,选题表.志愿号)TGROUPBY编号,导师姓名,题目,要求ORDERBY导师姓名,题目 图3生成显示数据的SQL语句 三、数据读取方法 通过互联网搜索,对DropDownList中实现显示多列数据的解决方案大致有两种,第一方法是通过修改图3所示的SQL语句,将
6、DropDownList要显示的各列合成一列,然后令DropDownList绑定到生成表的指定列中。通过实验,证明这种方法在ASP.Net中是不可取的,通过图4所示的结果可知,DropDownList会将字段中的所有英文空格舍弃,这会导致列出的结果无法对齐、无法辩认。 图4数据绑定结果 第二种方法是通过ASP.Net后台程序,读取图3所示的SQL语句生成的表中的各列数据,合成DropDownList项,然后添加到DropDownList中,其结果同样为图4所示。但这种方法和第一种方法不同,我们可以通过修改语句,为每列文字后补充空格,
7、从而使各列对齐提供了可能,而第一种方法则无法介入。 本例借鉴第二种方法,采用通过AccessDataSource与GridView结合,通过可视操作,使要添加到DropDownList中的数据直接填入GridView中(见图5),然后设GridView的Visible属性为False。再通过程序从GridView中读取数据。这种改进尽管损失了一些网页反应速度,但在较大程度上降低了程序编写难度、提高了程序的可靠性和编写效率。 图5GridView数据显示结果 通过这一改进,所需编写的向DropDownList中添加数据的程序变得非常
8、简单(见图6)。 ProtectedvoidPage_Load(objectsender,EventArgse){if(!Page.IsPostBack){FillList(D