如何用jQuery实现ASP.NET GridView折叠伸展效果


Posted in Javascript onSeptember 26, 2015

今天做静态页面时有一个需求,就是页面上有一组两个选项的单选按钮和一个有6行的列表(该列表用Table标签实现,不是DIV),当选择单选按钮的选项一时,列表的前三条信息显示后三条信息隐藏,当选择单选按钮的选项二时,列表的前三条信息隐藏后三条信息显示。那么就牵扯出我们今天的话题拉,如何实现呢?实现后该实现还能应用到哪些场景?

1、第一反应的解决方案

碰到这个需求后,我第一反应就是很简单啊,分别用两个DIV将前三个Table中的TR标签与后三个TR标签包起来,然后通过JS控制DIV的显示。

第一步:使用DIV包裹需要隐藏显示的TR。代码如下:

<table> 
<div id="divName"> 
<tr> 
<td>姓名:</td> 
<td><input id="txtname" type="text" /></td> 
</tr> 
</div> 
<div id="divSex"> 
<tr> 
<td>年龄:</td> 
<td><input id="txtsex" type="text" /></td> 
</tr> 
</div> 
</table>

第二步:使用JS控制DIV的显示,来达到控制隐藏或显示行的效果:

$("#divName").style.display = "none"; 
$("#divSex").style.display = "block";
第三步:运行程序,你会发现根本不管用,哈哈,有点被耍的感觉~!因为TR标签只能与TABLE标签搭配使用!好啦,虽然上面的代码不管用!但是还算起到了一个引导的作用吧,失败是成功的老娘嘛!

2、推荐的使用panel解决方案

这是在我描述了DIV与TR不能配合使用后,被同事笑话啦,哎、看来以后要多多学习学习HTML啦,笑话完我后,同事董宁告诉我用PANEL控件包住TR,用Visible属性在服务器级别控制TR的输出。

第一步:使用PANEL控件包住用来显示或隐藏的TR标签,代码如下:

<table> 
<asp:Panel ID="plName" runat="server"> 
<tr> 
<td>姓名:</td> 
<td><input id="txtname" type="text" /></td> 
</tr> 
</asp:Panel> 
<asp:Panel ID="plSex" runat="server" > 
<tr> 
<td>年龄:</td> 
<td><input id="txtsex" type="text" /></asp:Panel></td> 
</tr> 
</asp:Panel> 
</table>

第二步:在服务器端使用Panel控件的Visible属性控制行的输出,代码如下:

protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
 string val = RadioButtonList1.SelectedValue; 
 switch (val) 
 { 
  case "Name": 
   plName.Visible = true; 
   plSex.Visible = false; 
   break; 
  case "Sex": 
   plName.Visible = false; 
   plSex.Visible = true; 
   break; 
  default: 
   plName.Visible = true; 
   plSex.Visible = true; 
   break; 
 } 
}

这种方法虽然没有问题,但是感觉还是太无厘头了吧?控制页面展示的代码也要让服务器端去做吗?太浪费性能了!而且页面控制的代码与逻辑交互代码放一起简直是混乱不堪啊,在否决掉这个办法时,我们的大侠歪歪同志登场了,说道歪歪同志我不得不佩服啊,身为项目经理的歪歪,写代码的功底竟然比程序员还猛,完全无需代码提示,纯手工敲击键盘加清晰思路完美解决该问题!

3、无厘头解决方案

那么,我们来看这个思路,首先给每个TR标签赋予一个class样式,但是这个样式是没有实现的,仅仅做获取该TR的标识。

第一步:给TR标签添加一个没有实现的class样式。代码如下:

<table id="MyList"> 
<tr class="NameCSS"> 
<td>姓名:</td> 
<td><input id="txtname" type="text" /></td> 
</tr> 
<tr class="SexCss"> 
<td>年龄:</td> 
<td><input id="txtsex" type="text" /></td> 
</tr> 
</table>

第二步:使用Jquery根据class获取TR元素,并且控制其隐藏或显示,代码如下:

var $rowsName = $("#MyList").find(".NameCSS"); 
var $rowsSex = $("#MyList").find(".SexCss"); 
switch (selectedValue) 
{ 
 case "Name": 
 $rowsSex.hide(); 
 $rowsName.show(); 
 break; 
 case "Sex": 
 $rowsSex.show(); 
 $rowsName.hide(); 
 break; 
}

第三步:运行,完全没有问题,此问题解决!

4、根据第三个方案的实现联想的应用场景

我们现在可以控制TABLE中TR的显示与隐藏后,我们可以想到ASP.NET GridView控件在绑定数据后输出到浏览器后的数据部分,也是用TR的形式来显示的,那么我们可不可以控制GridView内容的显示与隐藏呢?当然没问题了。

第一步:如何给GridView数据行加入class属性呢?我们可以用GridView的行样式(<RowStyle CssClass="test" />)来设置,代码如下:

<asp:GridView ID="GridView1" runat="server"> 
<RowStyle CssClass="test" /> 
</asp:GridView>

此时我们运行页面,查看页面输出的源代码会看到GridView数据部分的所有TR都被赋予了一个class="test"属性!

第二步:绑定数据,代码如下:

if (!IsPostBack) 
  { 
   List<Student> sList = new List<Student>() 
   { 
    new Student(){ SID = "s001", SName="张三", SSex="男"}, 
    new Student(){ SID = "s002", SName="李四", SSex="女"}, 
    new Student(){ SID = "s003", SName="王五", SSex="男"} 
   }; 
 
   GridView1.DataSource = sList; 
   GridView1.DataBind(); 
  } 
 }

第三步:加入控制显示或隐藏GridView数据的按钮,代码如下:

<input id="btn" type="button" value="隐藏" onclick="ShowDate()" />

第四步:实现控制显示和隐藏的JS方法,代码如下:

function ShowDate() { 
   var val = $("#btn").val(); 
   var $rows = $("#GridView1").find(".test"); 
   switch (val) { 
    case "隐藏": 
     $rows.hide(); 
     $("#btn").val("显示"); 
     break; 
    case "显示": 
     $rows.show(); 
     $("#btn").val("隐藏"); 
     break; 
   } 
  }

呵呵,实现这个功能的原因、人物、灵感、整个前因后果就介绍完啦,编程嘛不仅是要实现功能,更要融于生活。

以上四个方法都是紧密相连,互相有联系的,希望大家细细品味,仔细琢磨,真正成为自己的东西,运用到学习中。

Javascript 相关文章推荐
javascript jQuery $.post $.ajax用法
Jul 09 Javascript
javascript与CSS复习(二)
Jun 29 Javascript
js获取select标签选中值的两种方式
Jan 09 Javascript
JavaScript在网页中画圆的函数arc使用方法
Nov 13 Javascript
微信小程序之仿微信漂流瓶实例
Dec 09 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
Jan 13 Javascript
Angular.Js之Scope作用域的学习教程
Apr 27 Javascript
详解vuex 中的 state 在组件中如何监听
May 23 Javascript
简单实现jQuery弹窗效果
Oct 30 jQuery
利用React Router4实现的服务端直出渲染(SSR)
Jan 07 Javascript
Vue 中可以定义组件模版的几种方式
Aug 06 Javascript
QML实现圆环颜色选择器
Sep 25 Javascript
angularjs学习笔记之双向数据绑定
Sep 26 #Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
Sep 26 #Javascript
angularjs学习笔记之完整的项目结构
Sep 26 #Javascript
jQuery实现的登录浮动框效果代码
Sep 26 #Javascript
angularjs学习笔记之三大模块(modal,controller,view)
Sep 26 #Javascript
JS实现可拖曳、可关闭的弹窗效果
Sep 26 #Javascript
JS实现网页Div层Clone拖拽效果
Sep 26 #Javascript
You might like
php中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
Laravel实现表单提交
2017/05/07 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
Bootstrap进度条组件知识详解
2016/05/01 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
浅谈Node.js爬虫之网页请求模块
2018/01/11 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
Python global全局变量函数详解
2018/09/18 Python
Python 多维List创建的问题小结
2019/01/18 Python
Django 拆分model和view的实现方法
2019/08/16 Python
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
应届毕业生个人自荐信范文
2013/11/30 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
争做文明公民倡议书
2019/06/24 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS