在Repeater控件中创建可隐藏区域

2016-02-19 17:08 3 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐在Repeater控件中创建可隐藏区域,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - Web开发 】

  在WEB应用中,如何才能使应用高效率呢?如何才能吸引用户呢?这的确是个大学问,页面的内容,色搭配等都十分重要。但不可忽视的是,多数情况下,对于数据的呈现方式也是十分重要的。由于web应用的规模不断增大,数据也越来越多了,有时候,由于在一个页面同时显示的数据太多,从而造成页面的不美观,用户因此也会感到厌倦和操作困难。因此,本文将介绍利用repeater控件的隐藏区域,以达到较好的数据显示效果。

  防止数据过多加载有很多方法,比如采用数据分页的方法,又或者采用master/detail的方式,就是先显示每条数据的主要内容,而对于详细数据,用户只需要点detail的链接就可以了。本文将介绍另外一种方式来显示数据,它采用折叠的隐藏方式,当用户需要看每条记录的详细描述时,不需要另外打开链接窗口,而直接在原数据记录的下方,呈现出原先隐藏的数据详细资料。这样一来,方便了用户的操作。我们先来看下其实际效果(http://aspnet.4guysfromrolla.com/demos/collapsibleRepeater.aspx)。 接下来,我们看如何在repeater中实现其效果。

  要实现上面的效果,我们必须采用客户端的脚本技术,从而实现隐藏或展示某个区域。而在IE 4.x后,是可以实现该技术的。比如,<div>标记内的内容,当用户点击时可以动态地隐藏起来,而<p>标记内容的内容,也可以当用户移动鼠标到某特定区域时显示出来。而其中的关键之处,在于其display和visibility的CSS风格属性。下面的代码显示了其使用方法,当用户点击HIDE CONTENT按钮时,则会隐藏原本显示的文本,当点击show content时,又会显示原先的文本了。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  

<script language="JavaScript">function showHideContent(id, show){ var elem = document.getElementById(id); if (elem) {  if (show)  {   elem.style.display = 'block';   elem.style.visibility = 'visible';  }  else  {   elem.style.display = 'none';   elem.style.visibility = 'hidden';  } }}</script><div id="someRegion"> This text will be displayed or hidden when clicking the appropriate button below...</div><input type="button" value = "Hide Content" onclick="showHideContent('someRegion', false);"><input type="button" value = "Show Content" onclick="showHideContent('someRegion', true);">

  在上面的javscript代码中,充分利用了HTML元素的display和visiblity属性,而且要注意,这两个属性应该同时使用。首先在button按钮的onclick事件中,调用了自定义的javscript写的函数showhidecontent,该函数有两个参数,id和show,id表示要显示或者隐藏的区域的名称,比如该例子中,要显示或隐藏的区域是<div>标记内的文本,show为布尔值,决定是否隐藏或显示该区域。而在showhidecontent函数中,则根据show的值,控制display和visiblity属性。

  明白了上面例子的道理后,下面就可以在repeater控件中应用了。比如,我们要创建一个FAQ问答录,其中有很多用户要询问的问题,则使用上面的方法,可以先将用户的问题使用repeater控件罗列出来,之后当用户点击该问题时,则会显示出隐藏的回答,十分方便。Repeater的代码片段如下:

  

<asp:Repeater id="rptFAQs" runat="server"><ItemTemplate> <h2><%# DataBinder.Eval(Container.DataItem, "Description") %></h2><br /> <b>Submitted By:</b> <%# DataBinder.Eval(Container.DataItem, "SubmittedByName") %><br /> <b>Views:</b> <%# DataBinder.Eval(Container.DataItem, "ViewCount", "{0:d}") %><br /> <b>FAQ:</b><br /> <%# DataBinder.Eval(Container.DataItem, "Answer") %></ItemTemplate></asp:Repeater>

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  我们可以看到,上面的代码只是描述了静态的一个repeater。接下来,我们要在repeater的模版列上进行一下修改,以满足要求。

  首先,我们为每一条记录都创建两个<div>标记,一个显示FAQ的问题,另一个则显示问题的答案,而且要为每一个<div>标记赋值一个唯一的id,每条记录中,显示问题的<div>标记的id记作h index(index为Repeater控件中每一项的id号,利用itemindex),而显示答案的<div>标记的id记作dindex。代码如下:

  

<script language="JavaScript">function ToggleDisplay(id){ var elem = document.getElementById('d' + id); if (elem) {  if (elem.style.display != 'block')  {   elem.style.display = 'block';   elem.style.visibility = 'visible';  }  else  {   elem.style.display = 'none';   elem.style.visibility = 'hidden';  } }}</script><style>.header { font-size: larger; font-weight: bold; cursor: hand; cursor:pointer;background-color:#cccccc; font-family: Verdana; }.details { display:none; visibility:hidden; background-color:#eeeeee;font-family: Verdana; }</style> <asp:Repeater id="rptFAQs" runat="server"> <ItemTemplate>  <div id='h<%# DataBinder.Eval(Container, "ItemIndex") %>' class="header"onclick='ToggleDisplay(<%# DataBinder.Eval(Container, "ItemIndex") %>);'>   <%# DataBinder.Eval(Container.DataItem, "Description") %>  </div>  <div id='d<%# DataBinder.Eval(Container, "ItemIndex") %>' class="details">   <b>Submitted By:</b> <%# DataBinder.Eval(Container.DataItem, "SubmittedByName") %><br />   <b>Views:</b> <%# DataBinder.Eval(Container.DataItem, "ViewCount", "{0:d}") %><br />   <b>FAQ:</b><br />   <%# DataBinder.Eval(Container.DataItem, "Answer") %>  </div> </ItemTemplate></asp:Repeater>

  我们重点来看下后半部分的代码,其中

  <div id='h<%# DataBinder.Eval(Container, "ItemIndex") %>' class="header"

  onclick='ToggleDisplay(<%# DataBinder.Eval(Container, "ItemIndex") %>);'>会将每条记录的问题部分,包裹在类似<div id=h1>,<div id=h2>之类的标记内,当点击时,则调用toggledisplay函数,在该函数内,看传入的参数是否是需要显示的区域(注意,通过

  var elem = document.getElementById('d' + id);)一句进行判断,是的话则设置display和visiblity属性显示,否则不显示。

来源:http://www.tulaoshi.com/n/20160219/1614321.html

延伸阅读
一、引入Dialog技术 下面介绍在制作ActiveX控件时引入有模式对话框技术,制作步骤如下: 创建一新的MFC ActiveX ControlWizard项目,取名为Hello,其他用缺省选项; 在ResourceView页中新增一对话框资源,命名为IDD_HELLODIALOG,可以在对话框上放自己的控件; 为对话框资源IDD_HELLODIALOG创建新...
在微软的大力扶持下,越来越多的软件公司开始支持ActiveX了,这对于喜欢编程的朋友来说可是件值得高兴的事!因为我们可以在程序中很方便地调用外部的OCX文件来实现复杂的功能,而在BCB中只带有很少几个ActiveX控件,大部分我们需要我们自己安装,下面通过对RealPlayer与Flash控件的安装与应用,让我们共同来学习ActiveX的组件在BCB中的使用...
标签: vb
前言: 还记得在asp3.0里,我们为了上载文件可真是煞费苦心,写了一大堆的代码,可执行起来还是那么慢。但在asp.net里这个问题可以轻松搞定,这篇文章我们就探讨如何建立一个用户自定义的文件上载控件,并在我们的.ASPX程序中使用它。 正文 第一步:开发自定义文件上载控件 打开VS.NET,建立一个工程:WebApp,我们使用WebApp项目来做我们的...
标签: windows 操作系统
打开Regedit.exe在“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer” 下新建dword值“NoSMHelp”值为“1”。切记在右窗口中创建。 重新启动即可。此法应用于WinME/2000/XP。 别让警告提示太烦 如果你在WinMe/2000/XP中有没有打开过“工具→工具夹选项→查看”,选择“隐藏受保护的...
标签: Web开发
使用JavaScript可以创建自己的对象。虽然JavaScript内部和浏览器本身的功能已十分强大,但JavaScript还是提供了创建一个新对象的方法。使其不必像超文本标识语言那样,求于或其它多媒体工具,就能完成许多复杂的工作。 在JavaScript中创建一个新的对象是十分简单的。首先它必须定义一个对象,而后再为该对象创建一个实例。这个实例就...

经验教程

563

收藏

76
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部