Grid控件,相信很多人都已经写过,或者重构过了。
对于Grid中的某些功能,实现起来会比较头疼。其中很重要的一个就是定制列样式的实现,如将列设为单选框,下拉框…等等。网上的Grid控件的做法,几乎都是使用的内部定义好的一些样式,使用时进行指定,虽说实现了大部分的需求功能,但对于某些特殊的自定义功能,想实现起来就很没什么办法了,只有扩展源代码。
做Grid控件有一段时间了,被这个问题烦了有一段时间。开始的时候也是模拟网上部分Grid的实现方式,自定义了部分列样式,封装在Grid中,但面对着各种需求的自定义样式,感觉越来越力不从心。
经过一段时间的摸索之后,终找到了一种个人最好的实现方式,对于实现某些自定义样式很方便,也很灵活。可以有效的将列的样式和Grid控件分离开来。实现了高定制化的Grid。
还是用代码来说明吧:
Grid控件中用实现自定义表格的伪代码:
function myGridConfig(id){
this.__id=id;
var _self=this;
...
_self.createHead=function(titles){
this.titles=titles;//设列标题以数组形式存储
...
}
_self.getdata=function(){
//从数据库读取数据,并以二维数组的方式返回。
}
_self.createBody=function(){
...
var grid=...//表格对象。
var data=getdata();
for(var i=0;i<data.length;i++){
var cells=data[i];
var tr = grid.insertRow();//添加一行。
for(var j=0;j<this.titles.length;j++){
var td=document.createElement("td");
if(document.all[this.__id+"_col_"+j]){//查找页面中有没有id为 id_col_index 形式的元素.这里使用了IE特有的document.all语法。
var customHtml = document.all[this.__id+"_col_"+j].innerHTML;
/**替换掉指定部分(即"_id_","_value_")的值。
通常的数据中,第一行都是从数据库中读取出来的id,所以此处将_id_替换为cells[0].**/
customHtml = customHtml.replace(/_id_/g,cells[0]).replace(/_value_/g,cells[j]);
td.innerHTML=customHtml;
}else{
td.innerHTML=cells[j]?cells[j]:"";
}
tr.appendChild(td);//将单元格TD加入TR。
}
grid.appendChild(tr);//将TR加入表格。
}
...
}
...
}
有了以上的代码,那么在调用Grid的页面,就可以很方便的实现自定义列样式了。假设从数据库中通过getdata()方法得到的数据为以下形式:
[
["001","张三","男"],
["002","李四","男"],
["003","王五","男"]
]
如想在最后一列加上一个“操作”列。则可以写一个div,将所要实现的功能放在div之中:
//这里是myGrid_col_3..如果Grid控件的__id为"myGrid",它的第四列就会被替换成为其内部的内容。
<div id="myGrid_col_3" style="display:none;">
<a onclick="edit('_id_');">编辑</a>
<a onclick="del('_id_');">删除</a>
//由于在上面的代码中,_id_会被替换为data中的第一列的值,并赋到相应的单元格内。
//所以每点击编辑,就会调用edit方法。并将当前行的第一列值传进去。就可以对专门的某一条数据进行操作。
</div>
<script>
function.onload=function(){
var gridConfig=new myGridConfig("myGrid");
var titles=["编号","姓名","性别","操作"]//存储Grid标题的数组
gridConfig.createHead(titles);
gridConfig.createBody();
}
</script>
是不是很方便呢?
这样这种方式的好处就是,样式代码和Grid控件分离开了,两者不再耦合在一起,当想要修改某一列的样式时,只要修改那一列的样式所在的div的内容即可。你想到什么样的样式,就可以写什么样的样式,只要你想得到,几乎都可以通过相应的方式实现。
当然,一般当前行数据的id是不会显示在代码中,而是是被隐藏起来的。隐藏的功能只要在myGridConfig中编写相应的代码进行实现就可以了,这里只是讨论自定义列样式的功能,所以就不涉及那方面了。
如果各位对我这个实现有什么看法和建议或者不清楚的地方,欢迎交流和讨论。
另外如果各位有各好的定制列样式的方法,各位是怎么做的呢?
------------------------------------------------------------------------------------------------
本来想把Grid的代码也共享过来,但由公司是使用的平台的特殊性,我写的那些控件都是以特定的格式编写和调用的,Grid控件离开平台就无法运行,要修改很大一部分代码,所以就没做这方面的工作。
(08-20 1:08 by ham)
分享到:
相关推荐
它提供了丰富的控件集,其中一个核心控件就是我们所说的“GRID”控件,这里特指的是一个简单的GRID控件。这个控件允许开发者在窗口中显示和操作数据,通常用于表格形式的数据展示和编辑。 GRID控件在WinForms中主要...
开发者可以自定义列的样式、行的显示方式、单元格的行为等,使得数据呈现更加灵活多样。例如,你可以调整列宽、设置列头的背景色、添加自定义按钮或图标到单元格,甚至在单元格内嵌入其他控件,如图片或下拉列表。 ...
总的来说,"CoolGridV2"作为一个强大的VB Grid控件,为开发者提供了丰富的功能和高度的可定制性,无论是新手还是经验丰富的程序员,都能从中受益。通过深入理解和熟练使用,开发者可以构建出功能完备、用户体验优秀...
【描述】"非常灵活,可以自己改成控件,里面点开直接可以看到效果"说明这个分离出的Grid控件具有高度的可定制性和灵活性。开发者可以按照自己的需求调整和扩展功能,将其转化为更适合项目需求的自定义控件。同时,...
EhLib 11.0 是一款针对 Delphi 开发者的第三方 Grid 控件,它以其卓越的性能、丰富的功能和直观的用户界面而备受推崇。在 Delphi 的开发环境中,Grid 控件通常用于数据的展示和编辑,是构建数据驱动应用的核心组件。...
《VC++6.0环境下UltimateGrid控件的深度解析与应用示例》 UltimateGrid控件是一款在Microsoft Visual C++ 6.0开发环境中广泛使用的强大表格控件,它为开发者提供了丰富的功能和高度的自定义能力,极大地提升了...
在AngularJS开发中,UI-Grid是一个非常强大的数据网格组件,它允许开发者以灵活和高效的方式展示和操作表格数据。而“angularjs ui-grid datepicker”则是UI-Grid的一个扩展功能,它为表格中的日期字段提供了集成的...
MFCGrid控件的实现基于动态链接库(DLL),这使得它可以独立于主程序进行更新和维护。DLL文件包含了运行时所需的代码,而头文件和.lib文件则提供了编译时所需的接口定义和链接信息。在项目中集成`MFCGrid`控件时,...
其中,样式和模板是WPF中极其重要的概念,它们使开发者能够定制控件的外观和行为,实现一致且美观的设计。 #### 控件样式与模板的重要性 - **样式**(Styles):用于定义控件的外观以及交互行为,例如背景色、字体...
- **UltimateGrid72_Samples.zip**:这个文件可能包含了Ultimate Grid控件的示例程序和代码,开发者可以通过这些例子了解如何在实际项目中集成和使用控件,以及实现各种功能的方法。 - **UltimateGrid72_docs.zip**...
这款控件以其灵活性、可定制性和高效的性能赢得了开发者的青睐。 1. **特性与优势** - **高性能**:SlickGrid通过虚拟滚动技术实现高效渲染,只在可视区域内渲染行,避免了内存占用过大和页面卡顿的问题。 - **...
Grid++Report5报表控件是一款专门用于开发报表应用的组件,尤其适合于C++、C#和VB等编程语言的开发者。它提供了丰富的报表设计功能和灵活的数据绑定机制,使得在应用程序中集成复杂的报表系统变得相对简单。这款控件...
在 UniGui 框架中,`Grid+Report` 报表控件是用于数据展示和分析的强大工具,尤其适用于创建复杂的数据表格和报告。本文将深入探讨如何在 UniGui 中有效利用 `Grid` 和 `Report` 控件,以及它们在实际应用中的各种...
此外,该控件还具有高度的定制性,开发者可以根据需求调整列宽、样式、颜色,甚至实现复杂的自定义行为。 dhtmlxGrid的Ajax集成是其功能强大的一部分,允许通过Ajax请求动态加载和更新数据,减少了页面刷新的需求,...
它以其高度可定制性、灵活的数据操作和响应式设计而备受开发者喜爱。这个“含源代码的flexigrid JS grid控件”提供了完整的源码,使得开发者能够深入理解其工作原理,并根据项目需求进行自定义修改。 1. **...
在WPF(Windows Presentation Foundation)开发中,我们经常使用Grid控件来构建用户界面,它是一种灵活的布局系统,允许我们将窗口划分为多个行和列。然而,原生的Grid控件在显示表格线和行列合并方面可能无法满足...
经过改造后的DhtmlXGrid控件,更加强调了对JavaScript表格一般需求的满足,提高了用户体验和性能。 一、基本功能 1. 数据展示:DhtmlXGrid可以展示大量结构化的数据,通过行列布局,清晰地显示数据字段。 2. 表格...
标签中提到的"**button**",在WPF中是一个基本的交互控件,除了大小自适应的特性外,还支持各种样式和模板定制,以满足不同设计需求。你可以通过修改Button的ControlTemplate来改变其外观,同时保持其大小调整的灵活...
SlickGrid 是一个功能强大且灵活的网格控件库,旨在提供一个高效、可扩展、可定制的数据网格控件解决方案。下面是 SlickGrid API 的详细知识点: Constructor Slick.Grid 构造函数是 SlickGrid 的入口点,它接受四...
综上所述,Grid++Report6打印控件是开发者构建报表应用的理想选择,尤其对于那些需要高度定制和交互的报表。它的易用性和灵活性使得开发过程更为高效,同时提供的丰富功能确保了报表的专业性和多样性。在实际使用中...