asp.net gridview中用checkbox全選的幾種實現(xiàn)的區(qū)別
更新時間:2009年06月11日 21:34:05 作者:
這幾天為了改變客戶端grid的全選效率問題,詳細(xì)研究了ext中g(shù)rid的全選和gridview中通過腳本實現(xiàn)的全選效率,總結(jié)一下,供大家參考,有錯誤的地方,希望大俠指正,小弟獻(xiàn)丑了。
1、ext的grid
Ext.grid.CheckboxColumn = function(config){
config.id = config.id || 'ck';
config.columnId = config.id || 'ck';
return Ext.applyIf(config||{},{
init:function(grid){
grid.on('cellclick', this.onCellClick, this);
grid.on('headerclick',this.onHeaderClick,this);
}
,dataIndex:''
,header:'<div class="x-grid3-check-col"></div>'
,enableHeaderControl:true
,masterValue:false
,width:40
,align:'center'
,fixed:true
,headerUnchecked:'<div class="x-grid3-check-col"></div>'
,headerChecked:'<div class="x-grid3-check-col x-grid3-check-col-on"></div>'
,onHeaderClick:function(grid,columnIndex,event){
var cIndex = grid.getColumnModel().getIndexById(this.columnId);
var column = grid.getColumnModel().getColumnById(this.columnId);
if(cIndex == columnIndex && this.enableHeaderControl!==false){
var newValue = (typeof column.masterValue == "undefined")?this.masterValue:!column.masterValue;
column.masterValue = newValue;
var newHeader = newValue==true?this.headerChecked:this.headerUnchecked;
if(column.header != newHeader){
column.header = newValue==true?this.headerChecked:this.headerUnchecked;
grid.getColumnModel().fireEvent("headerchange",cIndex,newHeader);
}
grid.getView().updateHeaders();
if(this.dataIndex != ''){
var ct = grid.getStore().getCount();
for(var i=0;i<ct;i++){
this.toggleCheck(grid,i,columnIndex,newValue);
}
}
}
}
,onCellClick:function(grid,rowIndex,columnIndex,event){
var cIndex = grid.getColumnModel().getIndexById(this.columnId);
if(cIndex == columnIndex) this.toggleCheck(grid,rowIndex,columnIndex);
}
,toggleCheck:function(grid,rowIndex,columnIndex,newValue){
var td = grid.getView().getCell(rowIndex,columnIndex);
var record = grid.getStore().getAt(rowIndex);
var startValue = record.data[this.dataIndex];
if(this.dataIndex != ''){
var newValue = newValue||!Ext.fly(td).hasClass('x-grid3-check-col-on');
var e = {
grid: grid,
record: record,
field: this.dataIndex,
value: newValue,
originalValue: startValue,
row: rowIndex,
column: columnIndex,
cancel: false
};
if( (grid.fireEvent("beforeedit",e)!==false && !e.cancel)&&
(grid.fireEvent("validateedit",e)!==false && !e.cancel)){
record.set(this.dataIndex,newValue);
delete e.cancel;
grid.fireEvent("afteredit",e);
};
//計算選擇列
//SetTransportWAndB()
//SetTransportInfo(grid);
}
}
,renderer:function(value,meta,record){
meta.css = 'x-grid3-check-col-td x-grid3-check-col';
if(value==true || value=='true' || value=='on' || value==1 || value=='1'|| value=="True"|| value=="true") meta.css += ' x-grid3-check-col-on';
return '<div class="x-grid3-check-col-inner"> </div>';
}
});
}
這是ext的grid單寫checkbox框的實現(xiàn),后面說明幾種情況的效率
2、gridview的兩種實現(xiàn)
a、
function CA1(){
var frm=document.Form1;
for (var i=0;i<frm.elements.length;i++)
{
var e=frm.elements[i];
if ((e.name!='Checkbox2') && (e.type=='checkbox'))
{
e.checked=frm.Checkbox2.checked;
if (frm.Checkbox2.checked)
{
hL(e);
}//endif
else
{
dL(e);
}//endelse
}//endif
}//endfor
}
b、
function selectAll(oCheckbox)
{
for(i=1;i<document.all.GridViewGoodsInfo.rows.length;i++)
{
//document.all.GridView1.rows(i).cell(0).children(0).checked=oCheckbox.checked;
GridViewGoodsInfo.rows[i].cells[0].getElementsByTagName("INPUT")[0].checked = oCheckbox.checked; }
}
加上ext的grid自帶選擇框的四種方案中,ext自帶方式效率最低,顯示500多條記錄全選需要時間最長,需要2分鐘多鐘,才能完成,修改為第一種方案后,1000條數(shù)據(jù)用時12秒多,在gridview的兩種方法里,a的用時最少1000條5秒鐘完成,b的稍慢些,6-7秒完成,以上是測試結(jié)果,環(huán)境不同,效果也不同,這僅是我個人測試的結(jié)果,供大家參考
Ext.grid.CheckboxColumn = function(config){
config.id = config.id || 'ck';
config.columnId = config.id || 'ck';
return Ext.applyIf(config||{},{
init:function(grid){
grid.on('cellclick', this.onCellClick, this);
grid.on('headerclick',this.onHeaderClick,this);
}
,dataIndex:''
,header:'<div class="x-grid3-check-col"></div>'
,enableHeaderControl:true
,masterValue:false
,width:40
,align:'center'
,fixed:true
,headerUnchecked:'<div class="x-grid3-check-col"></div>'
,headerChecked:'<div class="x-grid3-check-col x-grid3-check-col-on"></div>'
,onHeaderClick:function(grid,columnIndex,event){
var cIndex = grid.getColumnModel().getIndexById(this.columnId);
var column = grid.getColumnModel().getColumnById(this.columnId);
if(cIndex == columnIndex && this.enableHeaderControl!==false){
var newValue = (typeof column.masterValue == "undefined")?this.masterValue:!column.masterValue;
column.masterValue = newValue;
var newHeader = newValue==true?this.headerChecked:this.headerUnchecked;
if(column.header != newHeader){
column.header = newValue==true?this.headerChecked:this.headerUnchecked;
grid.getColumnModel().fireEvent("headerchange",cIndex,newHeader);
}
grid.getView().updateHeaders();
if(this.dataIndex != ''){
var ct = grid.getStore().getCount();
for(var i=0;i<ct;i++){
this.toggleCheck(grid,i,columnIndex,newValue);
}
}
}
}
,onCellClick:function(grid,rowIndex,columnIndex,event){
var cIndex = grid.getColumnModel().getIndexById(this.columnId);
if(cIndex == columnIndex) this.toggleCheck(grid,rowIndex,columnIndex);
}
,toggleCheck:function(grid,rowIndex,columnIndex,newValue){
var td = grid.getView().getCell(rowIndex,columnIndex);
var record = grid.getStore().getAt(rowIndex);
var startValue = record.data[this.dataIndex];
if(this.dataIndex != ''){
var newValue = newValue||!Ext.fly(td).hasClass('x-grid3-check-col-on');
var e = {
grid: grid,
record: record,
field: this.dataIndex,
value: newValue,
originalValue: startValue,
row: rowIndex,
column: columnIndex,
cancel: false
};
if( (grid.fireEvent("beforeedit",e)!==false && !e.cancel)&&
(grid.fireEvent("validateedit",e)!==false && !e.cancel)){
record.set(this.dataIndex,newValue);
delete e.cancel;
grid.fireEvent("afteredit",e);
};
//計算選擇列
//SetTransportWAndB()
//SetTransportInfo(grid);
}
}
,renderer:function(value,meta,record){
meta.css = 'x-grid3-check-col-td x-grid3-check-col';
if(value==true || value=='true' || value=='on' || value==1 || value=='1'|| value=="True"|| value=="true") meta.css += ' x-grid3-check-col-on';
return '<div class="x-grid3-check-col-inner"> </div>';
}
});
}
這是ext的grid單寫checkbox框的實現(xiàn),后面說明幾種情況的效率
2、gridview的兩種實現(xiàn)
a、
function CA1(){
var frm=document.Form1;
for (var i=0;i<frm.elements.length;i++)
{
var e=frm.elements[i];
if ((e.name!='Checkbox2') && (e.type=='checkbox'))
{
e.checked=frm.Checkbox2.checked;
if (frm.Checkbox2.checked)
{
hL(e);
}//endif
else
{
dL(e);
}//endelse
}//endif
}//endfor
}
b、
function selectAll(oCheckbox)
{
for(i=1;i<document.all.GridViewGoodsInfo.rows.length;i++)
{
//document.all.GridView1.rows(i).cell(0).children(0).checked=oCheckbox.checked;
GridViewGoodsInfo.rows[i].cells[0].getElementsByTagName("INPUT")[0].checked = oCheckbox.checked; }
}
加上ext的grid自帶選擇框的四種方案中,ext自帶方式效率最低,顯示500多條記錄全選需要時間最長,需要2分鐘多鐘,才能完成,修改為第一種方案后,1000條數(shù)據(jù)用時12秒多,在gridview的兩種方法里,a的用時最少1000條5秒鐘完成,b的稍慢些,6-7秒完成,以上是測試結(jié)果,環(huán)境不同,效果也不同,這僅是我個人測試的結(jié)果,供大家參考
您可能感興趣的文章:
- asp.net GridView控件中模板列CheckBox全選、反選、取消
- asp.net Repeater取得CheckBox選中的某行某個值的c#寫法
- 在asp.net中實現(xiàn)datagrid checkbox 全選的方法
- asp.net 獲取Datalist中Checkbox的值的小結(jié)
- WPF的ListView控件自定義布局用法實例
- asp.net ListView 數(shù)據(jù)綁定
- ASP.NET中ListView(列表視圖)的使用前臺綁定附源碼
- ASP.NET筆記之 ListView 與 DropDownList的使用
- asp.net ListView交替背景顏色實現(xiàn)代碼
- WPF實現(xiàn)帶全選復(fù)選框的列表控件
相關(guān)文章
Asp.net生成Excel文件并下載(更新:解決使用迅雷下載頁面而不是文件的問題)
Asp.net生成Excel文件并下載(更新:解決使用迅雷下載頁面而不是文件的問題)2012-01-01
談?wù)勅绾卧贏SP.NET Core中實現(xiàn)CORS跨域
本篇文章主要介紹了如何在ASP.NET Core中實現(xiàn)CORS跨域,CORS主要是解決Ajax跨域限制的問題,有興趣的可以了解一下。2016-12-12
.NET Core 實現(xiàn)微信小程序支付功能(統(tǒng)一下單)
最近公司研發(fā)了幾個電商小程序,還有一個核心的電商直播,只要是電商一般都會涉及到交易信息,離不開支付系統(tǒng),這里我們統(tǒng)一實現(xiàn)小程序的支付流程。感興趣的朋友跟隨小編一起看看吧2019-09-09
Asp.net MVC中使用JQuery插件ajaxFileUpload上傳文件
這篇文章主要介紹了Asp.net MVC中使用JQuery插件ajaxFileUpload上傳文件,需要的朋友可以參考下2016-08-08
asp.net4.0框架下驗證機(jī)制失效的原因及處理辦法
asp.net4.0框架下驗證機(jī)制失效的原因及處理辦法,需要的朋友可以參考一下2013-06-06
asp.net 產(chǎn)生唯一隨機(jī)碼的方法分析
現(xiàn)在的WEB中經(jīng)常會需要產(chǎn)生一些邀請碼、激活碼。需要是唯一并且隨機(jī)的。下面總結(jié)下一些常用的產(chǎn)生隨機(jī)碼的方法,并分享自己的1個方法.2010-10-10
OpenCV 3.1.0+VS2015開發(fā)環(huán)境配置教程
這篇文章主要為大家詳細(xì)介紹了OpenCV 3.1.0+VS2015開發(fā)環(huán)境配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11

