Asp.net的DataGrid实现列冻结(C#)
Asp.net的DataGrid实现列冻结(C#)
一、写在前面
列冻结即在拖动横向滚动条时,冻结的列会随着滚动条移动,使得该列不会因为拖动滚动条而被隐藏,呈现出仿佛冻结的效果。列冻结与表头冻结是很常见的需求,但是在DataGrid中列冻结并不简单,在网络中寻找一圈后,发展网络给出的方法不是因为太老旧已经无法使用,就是在推荐使用DataGridView控件,所以我想出了一个简单粗暴的方法,用另一张表覆盖原有的表来实现冻结,这也与许多老方法的思路是一致的。
二、DataGrid的列冻结
2.1 思路
使用CSS样式中的position定位属性来使B表覆盖A表,B表不受滚动轴的影响,A表随着滚动轴滚动,从而呈现出B表的列表被冻结的效果。
有了思路可以来写代码了:
<body>
<div id="div1" style="width: 50%; background-color: aliceblue; height: 500px; margin: 0 auto">
<div id="div2" style="position: relative">
<div id="div3" style="overflow-x: scroll; background-color: azure;">
<div id="div4" style="width: 1200px; background-color: burlywood; height: 300px;">
假装我是一个表格,假装我是一个表格,假装我是一个表格,假装我是一个表格,假装我是一个表格,假装我是一个表格,假装我是一个表格,假装我是一个表格
</div>
</div>
<div id="div5" style="position: absolute; height:300px; width:50px; background-color:antiquewhite; top:0px;"></div>
</div>
</div>
</body>
代码清单 2-1

页面效果 2-1
这里使用了五个div,div5在div2基础上使用绝对定位,实现了对div3的覆盖,之后我们会将div4改为原表格,div5改为覆盖表格。实现效果如“页面效果 2-1”所示,粉色的div5覆盖了褐色的div4,在拖动滚动条时,粉色块不动,褐色块在动,实现了类似列冻结效果。
2.2 实现过程
现在可以将DataGrid添加到div4和div5上了:
<div id="div3" style="overflow-x: scroll; background-color: azure;">
<%--<div id="div4" style="width: 1200px; background-color: burlywood; height: 300px;">
</div>--%>
<asp:DataGrid ID="dg_test" runat="server"
AutoGenerateColumns="false" Width="600px">
<Columns>
<asp:BoundColumn HeaderText="Id" DataField="Id"></asp:BoundColumn>
<asp:BoundColumn HeaderText="姓名" DataField="Name"></asp:BoundColumn>
<asp:BoundColumn HeaderText="年龄" DataField="Age"></asp:BoundColumn>
<asp:BoundColumn HeaderText="就读学校" DataField="School"></asp:BoundColumn>
<asp:BoundColumn HeaderText="技能" DataField="Skill"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="说明">
<ItemTemplate>
<asp:Label ID="lbl_tip" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Tip") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn HeaderText="爱好" DataField="Hobit"></asp:BoundColumn>
<asp:BoundColumn HeaderText="地址" DataField="Adress"></asp:BoundColumn>
<asp:BoundColumn HeaderText="爱好" DataField="Hobit"></asp:BoundColumn>
<asp:BoundColumn HeaderText="地址" DataField="Adress"></asp:BoundColumn>
<asp:BoundColumn HeaderText="爱好" DataField="Hobit"></asp:BoundColumn>
<asp:BoundColumn HeaderText="地址" DataField="Adress"></asp:BoundColumn>
<asp:BoundColumn HeaderText="爱好" DataField="Hobit"></asp:BoundColumn>
<asp:BoundColumn HeaderText="地址" DataField="Adress"></asp:BoundColumn>
</Columns>
</asp:DataGrid>
</div>
<div id="div5" style="position: absolute; background-color: antiquewhite; top: 0;">
<asp:DataGrid ID="dg_test_cover" runat="server"
AutoGenerateColumns="false">
<Columns>
<asp:BoundColumn HeaderText="Id" DataField="Id"></asp:BoundColumn>
<asp:BoundColumn HeaderText="姓名" DataField="Name"></asp:BoundColumn>
</Columns>
</asp:DataGrid>
</div>
代码清单 2-2

页面效果 2-2
Asp.net的DataGrid实现列冻结(C#)的更多相关文章
- WPF 中获取DataGrid 模板列中控件的对像
WPF 中获取DataGrid 模板列中控件的对像 #region 当前选定行的TextBox获得焦点 /// <summary> /// 当前选定行的TextBox获得焦点 /// &l ...
- easyui datagrid的列编辑
[第十五篇]easyui datagrid的列编辑,同时插入两张表的数据进去 看图说话. 需求:插入两张表,上面的表单是第一张表的内容,下面的两个表格是第二张详情表的内容,跟第一张表的id关联 第 ...
- WPF DataGrid 操作列 类似 LinkButton
WPF中没有类似LinkButton,所以只有运用Button及样式来实现LinkButton. DataGrid 操作列 实现 多个类似LinkButton按钮: 具体实现代码如下: <Dat ...
- WPF 用 DataTemplate 合并DataGrid列表列头<类似报表设计>及行头列头样式 - 学习
WPF中 DataGrid 列头合并,类似于报表设计.效果图如下↓ 1.新建一个WPF项目WpfApplication1,新建一个窗体DataGridTest,前台代码如下: <Window x ...
- WPF DataGrid某列使用多绑定后该列排序失效,列上加入 SortMemberPath 设置即可.
WPF DataGrid某列使用多绑定后该列排序失效 2011-07-14 10:59hdongq | 浏览 1031 次 悬赏:20 在wpf的datagrid中某一列使用了多绑定,但是该列排序失 ...
- ASP.NET repeater添加序号列的方法
ASP.NET repeater添加序号列的方法 1.<itemtemplate> <tr><td> <%# Container.ItemIndex + 1% ...
- ASP.NET中重复表格列合并的实现方法(转自脚本之家)
这几天做一个项目有用到表格显示数据的地方,客户要求重复的数据列需要合并,就总结了一下.NET控件GridView 和 Repeater 关于重复数据合并的方法. 这是合并之前的效果: 合并之后的效果图 ...
- DataGrid的列上添加日期控件
今天的使用EasyUI datagrid的时候,遇到了如下问题,如下图:
- WPF DATAGrid 空白列 后台绑定列 处理
原文:WPF DATAGrid 空白列 后台绑定列 处理 AutoGenerateColumns <DataGrid x:Name="dataGrid" Margin=&qu ...
随机推荐
- 一个'&'引起md5签名不一致问题
有时会遇到这样一个问题,本地和接口在验证数据签名时,明明两端打印出来的两个字符串一模一样,但是md5加密后的两个密文却不一样.例如:本地字符串:$str = "a=1&b=2& ...
- 你不知道的JS之作用域和闭包(一)什么是作用域?
原文:你不知道的js系列 什么是作用域(Scope)? 作用域 是这样一组规则——它定义了如何存放变量,以及程序如何找到之前定义的变量. 编译器原理 JavaScript 通常被归类为动态语言或者解释 ...
- js计算指定日期的下一年的日期
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 解决localdb中文智能的问题
declare @database nvarchar(100) declare tmpCur cursor for select DB_NAME() open tmpCur fetch next fr ...
- 【安富莱二代示波器教程】第17章 附件B---功能扩展和改进方向
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=45785 第17章 附件B---功能扩展和改进方向 ...
- Go变量逃逸分析
目录 什么是逃逸分析 为什么要逃逸分析 逃逸分析是怎么完成的 逃逸分析实例 总结 写过C/C++的同学都知道,调用著名的malloc和new函数可以在堆上分配一块内存,这块内存的使用和销毁的责任都在程 ...
- [Swift]LeetCode451. 根据字符出现频率排序 | Sort Characters By Frequency
Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...
- [Swift]LeetCode551. 学生出勤纪录 I | Student Attendance Record I
You are given a string representing an attendance record for a student. The record only contains the ...
- Android studio的错误:radle sync failed: Cause: failed to find target android-21 :
这个错误在Android studio中经常出现,特别是你在编译不同的app的时候,到底是什么原因会导致该错误产生呢? 首先看错误信息,是找不到目标android版本-21导致的,这就很明显了,你的目 ...
- Java 8中用法优雅的Stream,性能也"优雅"吗?
之前的文章中我们介绍了Java 8中Stream相关的API,我们提到Stream API可以极大提高Java程序员的生产力,让程序员写出高效率.干净.简洁的代码. 那么,Stream API的性能到 ...