FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 15391|回复: 15
打印 上一主题 下一主题

轻松搞定表格行样式与单元格样式,代码由50行减少为10行

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-30 17:46:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为了给表格的行添加样式,之前我们可是没少费工夫:

1. 首先在页面上放一个 HiddenField,用来保存需要添加样式的行
  1. <f:HiddenField ID="highlightRows" runat="server">
  2. </f:HiddenField>
复制代码


2. 在表格的行绑定事件中,将需要添加样式的行保存下来
  1. protected void Grid1_RowDataBound(object sender, FineUIPro.GridRowEventArgs e)
  2. {
  3.         DataRowView row = e.DataItem as DataRowView;
  4.         if (row != null)
  5.         {
  6.                 int entranceYear = Convert.ToInt32(row["EntranceYear"]);

  7.                 if (entranceYear >= 2006)
  8.                 {
  9.                         highlightRows.Text += e.RowIndex.ToString() + ",";
  10.                 }
  11.         }
  12. }
复制代码

3. 在表格的数据加载完成后,通过JavaScript代码来添加行样式
  1. <f:Grid>
  2.         <Listeners>
  3.                 <f:Listener Event="dataload" Handler="onGridDataLoad" />
  4.         </Listeners>
  5. </f:Grid>
复制代码
  1. <script type="text/javascript">
  2.         var highlightRowsClientID = '<%= highlightRows.ClientID %>';
  3.         var gridClientID = '<%= Grid1.ClientID %>';

  4.         function onGridDataLoad() {
  5.                
  6.                 var highlightRows = F(highlightRowsClientID);
  7.                 var grid = F(gridClientID);

  8.                 // 获取所有的行节点
  9.                 var allRows = grid.getRowEls();
  10.                 allRows.removeClass('highlight');

  11.                 $.each(highlightRows.getValue().split(','), function (index, item) {
  12.                         if (item) {
  13.                                 allRows.eq(item).addClass('highlight');
  14.                         }
  15.                 });

  16.         }
  17. </script>
复制代码

4. 最终效果:




====华丽的分隔线========================================
====华丽的分隔线========================================
====华丽的分隔线========================================
====华丽的分隔线========================================
====华丽的分隔线========================================


现在,和这么复杂的流程来个告别,新版FineUI(专业版)即将对行样式和单元格样式提供默认支持。

来看下新版的做法:

1. 在表格的行绑定事件中,为指定的行添加样式
  1. protected void Grid1_RowDataBound(object sender, FineUIPro.GridRowEventArgs e)
  2. {
  3.         DataRowView row = e.DataItem as DataRowView;
  4.         int entranceYear = Convert.ToInt32(row["EntranceYear"]);

  5.         if (entranceYear >= 2006)
  6.         {
  7.                 e.RowCssClass = "special";
  8.         }
  9. }
复制代码

2. 搞定!效果和之前的一模一样!



是不是很方便?查看在线示例:http://fineui.com/demo_pro/#/demo_pro/grid/grid_rowcssclass.aspx


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
沙发
发表于 2014-10-30 17:54:44 | 只看该作者
老大,地址链接搞错了吧,你这是在本地测试的呢:http://localhost
板凳
 楼主| 发表于 2014-10-30 17:56:44 | 只看该作者
Mr.Wu 发表于 2014-10-30 17:54
老大,地址链接搞错了吧,你这是在本地测试的呢:http://localhost

多谢指出,已更新
地板
发表于 2014-10-30 18:39:54 | 只看该作者
开源版也可以用吧?
5#
发表于 2014-10-30 18:42:16 | 只看该作者
三石大大,不觉得还是麻烦吗,不能封装吗? 把前台的JS和CSS都封装了
6#
 楼主| 发表于 2014-10-30 19:31:23 | 只看该作者
oliverary 发表于 2014-10-30 18:42
三石大大,不觉得还是麻烦吗,不能封装吗? 把前台的JS和CSS都封装了

现在不需要写任何一行 JavaScript 代码。你看下官网示例:http://fineui.com/demo_pro/defau ... id_rowcssclass.aspx

写CSS可以可以灵活的定义样式,这个是必须的
7#
发表于 2014-10-30 20:50:25 | 只看该作者
这就是我想要的结果,看来我了直没有按之前的方式处理等这个是对的啦  哈哈哈
8#
发表于 2014-10-30 20:55:08 | 只看该作者
正想去提个建议,把底部汇总的也改成纯的服务器端事件来处理,惊奇的发现,现在的版本已经是这个效果啦  哈。太牛了
9#
 楼主| 发表于 2014-10-30 21:07:26 | 只看该作者
Tiger 发表于 2014-10-30 20:55
正想去提个建议,把底部汇总的也改成纯的服务器端事件来处理,惊奇的发现,现在的版本已经是这个效果啦  哈 ...

这个很久很久之前就是通过服务器代码设置的,这样编码简单,也不容易出错
10#
发表于 2014-10-30 21:20:59 | 只看该作者
三石先生的目标可以设定为  100%无JS 因为我不会写 {:soso_e151:}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-4-28 13:07 , Processed in 0.050586 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表