选择显示字体大小

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


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

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

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

<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>

  我们可以看到,上面的代码只是描述了静态的一个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属性显示,否则不显示。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons