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

创建|控件

在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时,又会显示原先的文本了。

<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"
 >
<input type="button" value = "Show Content" >
  在上面的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属性显示,否则不显示。

时间: 2024-11-01 04:49:57

在Repeater控件中创建可隐藏区域的相关文章

JS实现在Repeater控件中创建可隐藏区域的代码_javascript技巧

由于web应用的规模不断增大,数据也越来越多了,有时候,由于在一个页面同时显示的数据太多,从而造成页面的不美观,用户因此也会感到厌倦和操作困难.因此,本文将介绍利用repeater控件的隐藏区域,以达到较好的数据显示效果.   防止数据过多加载有很多方法,比如采用数据分页的方法,又或者采用master/detail的方式,就是先显示每条数据的主要内容,而对于详细数据,用户只需要点detail的链接就可以了.本文将介绍另外一种方式来显示数据,它采用折叠的隐藏方式,当用户需要看每条记录的详细描述时,

Repeater控件中的Linkbutton单击事件问题

问题描述 repeater控件中:<asp:LinkButtonID="addLnk"runat="server"CommandName="ADD"CommandArgument='<%#Eval("ID")%>'>加入试卷</asp:LinkButton><asp:LinkButtonID="delLnk"runat="server"Comma

repeater控件中包含radiobuttonlist控件,如何使radiobuttonlist绑定数据

问题描述 repeater控件中包含radiobuttonlist控件,radiobuttonlist控件中包含多个itemlist如何使radiobuttonlist绑定数据,然后是每个itemlist显示数据库中的相应字段望指教,谢谢 解决方案 解决方案二:itembind(sender,e)解决方案三:引用1楼buaabyy的回复: itembind(sender,e) 请具体点,可以吗谢谢了解决方案四:在repeater的ItemDataBound事件中写相应的代码

关于Repeater控件中,得到DropDownList的值等一系列问题[专为此问题注册帐号,散分]

问题描述 各位老鸟,您好,小弟在使用Repeater控件中遇到了一些麻烦,请各位老鸟解答这里可以看到,其中的菜品名称和菜品价格都是通过Label控件绑定显示出来的,后面加了一个点菜份数,是用的DropDownList,我选择好了需要的菜品后,点提交按钮后,只能提交最后一个值"鳝鱼",而且需要的份数也显示不出来,我把该提交按钮的代码发上来,用的是Foreach遍历整个Repeater,但是好像这样不是我需要的.我需要实现的是:1.得到Repeater控件中的DropDownList的值,

Repeater控件中利用RadioButtonList绑定数据库多个字段

问题描述 请教各位高手,我想利用Repeater控件中添加RadioButtonList控件来实现考试系统中的单项选择题的功能,之前好像这个论坛有一篇类似的帖子,但是我试过了,不能用,不知道那个发帖的兄台居然说可以用,有点奇怪,我已经将Repeater控件做了数据绑定,代码是:privatevoidBindData(){SqlConnectioncon=DB.CreateConnection();con.Open();SqlCommandcmd=newSqlCommand("select*fro

如何在 MSChart控件中 创建自定义 &amp;amp;quot;文本标注&amp;amp;quot; ?

问题描述 如下图所示:C#控件MSchart画的曲线图,在图表区上方有自动生成的文字标注,不是title,也不是lable,不知道怎么做,请问有了解的吗? 解决方案 解决方案二:应该说是自定义文本,动态生成的文本标注!!解决方案三:可以用TextAnnotation如下所示:TextAnnotationtxtAn=newTextAnnotation();txtAn.Alignment=ContentAlignment.BottomLeft;//对齐方式txtAn.ForeColor=System

在Repeater控件中使用if语句

控件|语句 我最近正在写一个 BBS 的项目,在显示主题列表时,我遇到了一个问题. BBS_Topic 的数据表结构定义大致是下面这样: TABLE BBS_Topic( TopicID INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, Title NVARCHAR(40), Author NVARCHAR(20), PostDate DATETIME NOT NULL DEFAULT GETDATE(), Content NTEXT, Clicked INT N

如何在同页面中的Repeater控件中获取DropDown已经选定的值

问题描述 DropDownList是二级联动的省市,Repeater显示的是详细信息,如何在DropDownList选定后从repeater显示出来,请教,多谢!! 解决方案 解决方案二:DropDownList在Repeater外面?上放置Label,记下ID,然后查找该Label,将结果显示出来解决方案三:是在外面,用lable记录DropDownList的选定值吗?但是我二级联动是读的后台的代码

关于Repeater控件的使用

控件 关于Repeater控件的使用 Repeater控件是一个数据显示控件,该控件允许通过为列表中显示的每一项重复使用指定的模板来自定义布局. 要显示数据,必须先创建模板来绑定数据列表,模块定义如下(另见SDK): 模板 说明 AlternatingItemTemplate 与 ItemTemplate 元素类似,但在 Repeater 控件中隔行(交替项)呈现一次.通过设置 AlternatingItemTemplate 元素的样式属性,可以为其指定不同的外观. FooterTemplate