如何用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获取GridView中用户点击控件的行号,列号
Apr 14 Javascript
用AJAX返回HTML片段中的JavaScript脚本
Jan 04 Javascript
javascript利用初始化数据装配模版的实现代码
Nov 17 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
Nov 25 Javascript
RGB和YUV 多媒体编程基础详细介绍
Nov 04 Javascript
jQuery Validate设置onkeyup验证的实例代码
Dec 09 Javascript
JS闭包用法实例分析
Mar 27 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
Oct 26 Javascript
微信小程序的mpvue框架快速上手指南
May 15 Javascript
vue请求服务器数据后绑定不上的解决方法
Oct 30 Javascript
vue实现点击出现操作弹出框的示例
Nov 05 Javascript
JavaScript基于SVG的图片切换效果实例代码
Dec 15 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高级对象构建 工厂模式的使用
2012/02/05 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
php HTML无刷新提交表单
2016/04/05 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
一个简单的JS鼠标悬停特效具体方法
2013/06/17 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
Python中%r和%s的详解及区别
2017/03/16 Python
Python global全局变量函数详解
2018/09/18 Python
python如何保证输入键入数字的方法
2019/08/23 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
单位消防安全制度
2014/01/12 职场文书
《分一分》教学反思
2014/04/13 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
违纪学生保证书
2015/02/27 职场文书
昆虫记读书笔记
2015/06/26 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
SQL Server连接查询的实用教程
2021/04/07 SQL Server
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python