接到上面的order, 将datagrid改写成表头固定, 而要带scroll bar滚动记录. 看了felix兄的文章
【程序编程相关:Windows“贴身秘书”—“运行”命令】 【推荐阅读:TeX中显示大小写罗马数字】fixed header scrollable datagrid control 【扩展信息:BCB怎样让程序脱离BCB独立运行】 http://blog.joycode.com/felix/articles/32789.aspx 好像有点不太适合自己用. 他将header截出来, 做成div, 然后把原来的datagrid header盖住, 形成一种假象, 就像表头真的被固定了, 而且两者的位置好像对得不准, 新生成的header有点左移(不知道是不是我机子的问题). 后来按照我跟上司的设想, 因为datagrid最终输出的是一个table, 所以将这个table拆分为三部份, header, items, pager. 然后在items外面加一个div, 用javascript控制div是否出现scroll bar. btw: 因为datagrid我们是重新封装过的. 有部份代码只适合此grid使用, 但万变不离其中. enjoy it . /// <summary> /// author : kenneth lee /// create date : 2004-11-8 /// description : override render方法, 在网格输出时, 修改网站的样式. /// 将整个datagrid划分为headers, items, pager 三个表格, 利用div的属性控制是否出现scroll bar. /// 并且确保客户端调整控件其它样式时, 其样式保持不变. /// </summary> /// <param name="writer"></param> protected override void render(htmltextwriter writer) { //确定datagrid处于何种状态, 是运行时还是设计时 //control.site属性是获取控件当前站点的信息 bool griddesignmode = ((site != null) && (site.designmode));//只有运行时输出以下内容
if (!griddesignmode) { // 将html转换为stringbuilder stringwriter sw = new stringwriter();htmltextwriter htw = new htmltextwriter(sw);
//保证每列的宽度
style["table-layout"] = "fixed";// 输出到sw中.
base.render(htw);stringbuilder sbrenderedtable = sw.getstringbuilder();
htw.close();
sw.close();
string temp = sbrenderedtable.tostring();
if (sbrenderedtable.length > 0)
{ if (this.headertext == string.empty) { // 将datagrid的id替换为表头id sbrenderedtable.replace(id,id + "_headers", 0, (temp.indexof(id) + id.length)); // 为保持表头与表脚的高度, 将height属性去掉. sbrenderedtable.remove(sbrenderedtable.tostring().tolower().indexof("height:"), this.height.tostring().length+8); temp = sbrenderedtable.tostring(); //找出表头的长度. 以便分拆 int start = temp.tolower().indexof(@"<");int end = temp.tolower().indexof(@">") + 1;
string strtablestyle = temp.substring(start,end-start);
//因为要将datagrid划分为三个表格, 所以用一个大的div固定它们的宽度.并且保证scroll bar不出现. //要确保scroll bar不出, 用overflow-y:hidden就够了 if (this.height.tostring() == string.empty || this.height.tostring() == "100%") { sbrenderedtable.insert(0,@"<div id=´" + this.id + "_full´ style=´align:center; width: 100%; overflow-y:hidden´>"); } else { sbrenderedtable.insert(0,@"<div id=´" + this.id + "_full´ style=´align:center; width: 100%; overflow-y:hidden;height:" + this.height.tostring() + @"´>"); } ... 下一页