// ----------------------------------------------------------------------------------------------------------- // Rows filtering // ----------------------------------------------------------------------------------------------------------- MS.Filter; // ----------------------------------------------------------------------------------------------------------- // Returns cell value as string for filter TGP.GetStringFilter = function(row,col,raw){ var v = Get(row,col+"FilterValue"); if(v==null) v = raw ? Get(row,col)+"" : this.GetString(row,col,3)+""; else v += ""; if(Grids.OnGetFilterValue) { var tmp = Grids.OnGetFilterValue(this,row,col,v,raw?0:1); if(tmp!=null) v = tmp; } return v; } // ----------------------------------------------------------------------------------------------------------- // Returns cell value as number for filter TGP.GetNumberFilter = function(row,col,equalf){ var v = Get(row,col+"FilterValue"); if(v==null) v = equalf ? this.GetString(row,col) : Get(row,col); if(v=="0") v = 0; if(Grids.OnGetFilterValue) { var tmp = Grids.OnGetFilterValue(this,row,col,v,equalf?1:0); if(tmp!=null) v = tmp; } MS.Range; if(v && typeof(v)=="string" && this.IsRange(row,col)){ v = v.split(this.Lang.Format.ValueSeparator)[0]; var vp = v.indexOf(this.Lang.Format.RangeSeparator); if(vp>=0) v = v.slice(0,vp)-0; else v-=0; } ME.Range; return v; } // ----------------------------------------------------------------------------------------------------------- // Creates filter acording to row of type "Filter" and sets it to Filter1 TGP.BuildFilter = function(){ var F = "", C = this.Cols, R = this.GetFixedRows(); var Op = ["","==","!=","<","<=",">",">="]; var OpS = ["","==0","!=0","<0","<=0",">0",">=0"], tmp = 1, code = ""; var wo = this.FilterReplaceOne ? new RegExp(ToRegExp(this.FilterReplaceOne)) : null, wm = this.FilterReplaceMore ? new RegExp(ToRegExp(this.FilterReplaceMore)) : null; for(var i=0;i2) equalf = 0; } var cn = this.This+".GetNumberFilter(Row,'"+c+"',"+equalf+")"; var val = equalf ? this.GetString(r,c) : this.GetValue(r,c); if(type=="Enum" || type=="Radio"){ var fof = Get(r,c+"FilterOff"); if(val>fof) val--; } if(range && val && ff<=2 && typeof(Get(r,c))=="string"){ MS.Range; var frm = equalf ? this.GetFormat(r,c) : ""; val = Get(r,c)+""; if(!val) val = ""; if(ff==2) F += "!"; F += "("; var A = val.split(this.Lang.Format.ValueSeparator); for(var j=0;j="+B[0]+" && tmp"+tmp+"<="+B[1]; else if(B[0]===""||B[0]===String.fromCharCode(160)) F += "tmp"+tmp+"=="+((ff==1 || ff==2) && this.GetAttr(r,c,"CanEmpty") && (type!="Bool"||Get(r,c+"ShowMenu")!='0')?"=":"")+"''"; else if(frm) F += "tmp"+tmp+"=='"+this.Lang.Format.NumberToString(B[0],frm)+"'"; else F += "tmp"+tmp+"=="+B[0]; } F += ")"; if(val&&this.FilterIgnoreEmpty&8) F += " && tmp"+tmp+"!==''"; code += "var tmp"+(tmp++)+"="+cn+";"; ME.Range; } else { if(!val){ if(val==="") val="''"; if((ff==1 || ff==2) && this.GetAttr(r,c,"CanEmpty") && (type!="Bool"||Get(r,c+"ShowMenu")!='0')) val = "="+val; } else if(this.FilterIgnoreEmpty&(ff>2?1:8)) { code += "var tmp"+(tmp++)+"="+cn+";"; cn = "tmp"+(tmp-1); F += cn+"!==''&&"; } F += " "+cn+Op[ff]+(equalf ?"'"+val+"'" : val); } if(par) F += ")"; } else { var val = this.GetString(r,c,3); var cn = this.This+".GetStringFilter(Row,'"+c+"')"; if(type=="Enum" && Is(r,c+"FilterEnumKeys")) { val = Get(r,c); cn = this.This+".GetStringFilter(Row,'"+c+"',1)"; } MS.CharCodes; var codes = this.GetAttr(r,c,"CharCodes"); if(codes) { cn = "TGUseCharCodes("+cn+",'"+codes+"')"; val = UseCharCodes(val,codes); } ME.CharCodes; var local = this.GetAttr(r,c,"LocaleCompare"); var cas = this.GetAttr(r,c,"CaseSensitive"); var ft = Get(r,c+"FilterType"); if(ft==null) ft = Get(r,"FilterType"); if(ft!=null){ local = ft&2?1:0; cas = ft&4?0:1; } if(!cas){ val = local ? val.toLocaleLowerCase() : val.toLowerCase(); cn = cn+".to"+(local?"Locale":"")+"LowerCase()"; } var white = GetWhiteChars(this.GetAttr(r,c,"WhiteChars")); if(white){ val = val.replace(white,""); cn = cn+".replace("+white+",'')"; } var orig = val; val = (val+"").replace(/\\/g,"\\\\").replace(/\'/g,"\\\'"); if(this.CanAcceptEnters && this.CanAcceptEnters(r,c) && ff<=10) val = val.replace(/\n/g,"\\n"); function replacewildcards(val){ if(wo) val = val.replace(wo,"\u65011"); if(wm) val = val.replace(wm,"\u65012"); val = val.replace(/[\^\$\.\*\+\?\=\!\:\|\/\(\)\[\]\{\}\/]/g,"\\$&").replace(/\n/g,"\\n").replace(/\u65011/g,".").replace(/\u65012/g,".*"); if(ff<=8) val = "^"+val; else if(ff<10) val += "$"; return val; } if(range && (ff<=2 || ff>=7)){ MS.Range; var sep = this.Lang.Format.ValueSeparator; if(ff==2 || ff==8 || ff==10 || ff==12) F += "!"; F += "("; var A = val.split(sep), oa = orig.split(sep); for(var j=0;j=0"; else F += " tmp"+tmp+"=='"+A[j]+"'"; } else if(wo||wm){ A[j] = replacewildcards(A[j]); F += " tmp"+tmp+".search(/"+A[j]+"/)>=0"; } else if(ff<=8) F += " tmp"+tmp+".slice(0,"+oa[j].length+")=='"+A[j]+"'"; else if(ff<=10) F += " tmp"+tmp+".slice(-"+oa[j].length+")=='"+A[j]+"'"; else if(ff<=12) F += " tmp"+tmp+".search(/"+A[j].replace(/[\^\$\.\*\+\?\=\!\:\|\/\(\)\[\]\{\}\/]/g,"\\$&").replace(/\n/g,"\\n")+"/)>=0"; } F += ")"; if(val && this.FilterIgnoreEmpty&(ff>6?4:16)) F += " && tmp"+tmp+"!==''"; code += "var tmp"+(tmp++)+"="+cn+"+'';"; ME.Range; } else if(val==="" || val===String.fromCharCode(160)) F += cn + (ff&1?"==":"!=") + "''"; else { if(this.FilterIgnoreEmpty&&val&&this.FilterIgnoreEmpty&(ff>6?4:(ff>2?2:16))) { code += "var tmp"+(tmp++)+"="+cn+";"; cn = "tmp"+(tmp-1); F += cn+"!==''&&"; } if(ff<=6) F += " "+cn+(local?".localeCompare('"+val+"')"+OpS[ff] : Op[ff]+"'"+val+"'"); else if(wo||wm) { val = replacewildcards(val); F += " "+cn+".search(/"+val+"/)"+(ff&1?">=0":"<0"); } else if(ff<=8) F += " "+cn+".slice(0,"+orig.length+")"+(ff==7?"==":"!=")+"'"+val+"'"; else if(ff<=10) F += " "+cn+".slice(-"+orig.length+")"+(ff==9?"==":"!=")+"'"+val+"'"; else if(ff<=12) F += " "+cn+".search(/"+val.replace(/[\^\$\.\*\+\?\=\!\:\|\/\(\)\[\]\{\}\/]/g,"\\$&").replace(/\n/g,"\\n")+"/)"+(ff==11?">=0":"<0"); } } if(def) F += ")"; if(cf==2) F += ")"; } } this.Filter1 = F ? new Function("Row",code+"return "+F) : null; } // ----------------------------------------------------------------------------------------------------------- // Aplies filter to grid // Can be called with given cell, in this case updates the operator TGP.DoFilter = function(row,col,nosync){ if(!this.Filtering) return; if(row && !row[col+"Filter"]){ var def = Get(row,col+"DefaultFilter"); if(def==0) return; row[col+"Filter"] = def>0 ? def : ({"Text":1,"Lines":1,"Link":1,"Img":1,"Html":1,"EHtml":1,"Auto":1}[this.GetType(row,col)] ? 11 : 1); if(this.Undo&16) this.AddUndo({ Type:"Filter",Row:row,Col:col,OldOp:0,NewOp:row[col+"Filter"],OpChange:1}); } this.SaveCfg(); this.ColorFilterCells(); MS.Sync; if(this.Sync["filter"] && !nosync){ for(var i=0;ithis.SynchroCount) && (!(this.OnePage&2) || this.AllPages))){//****Ö±½Ó°ÑÊý¾Ý¿âÌá½»ºǫ́£¬ÖØвéѯ½á¹ûÏÔʾ by2014-11-20 //*****Ôö¼ÓÊ÷+¸ñÏߣ¬Ã»Ñ¡ÔñÊ÷½ÚµãʱºòÔö¼ÓÌáʾ if (typeof (isclick) != "undefined") { if (isclick != undefined && isclick == false) { alert(this.GetText("treeNodeFilter")); return; } } var where=null; var whereF=null; where=this.Data.Page.Url.match(/where=&/); whereF=this.Data.Data.Url.match(/where=&/); if(where==null){ where=this.Data.Page.Url.match(/where=*.+?&/); whereF=this.Data.Data.Url.match(/where=*.+?&/); } if(where){ var tok=""; if(this.gType==7){ tok=this.GetText("FText"); }else{ tok=this.GetText("FilterText"); } var temp=""; if(this.gType==7){ temp= where[0].replace("&","").split(",")[0].split(this.GetText("FText"))[0]+tok+this.getFilterInfo()+"&"; }else{ temp=where[0].replace("&","").split(",")[0].split(this.GetText("FilterText"))[0]+tok+this.getFilterInfo()+"&"; } this.Data.Page.Url=this.Data.Page.Url.replace(where,temp); this.Data.Data.Url=this.Data.Data.Url.replace(whereF,temp); } this.ReloadBody(null,1,"Filter"); }else if(this.formid == 9646||this.formid == 9654){//***9646µ÷Óà this.prg=true±íʾµ÷ÓÃÒ³Ãæ¹ýÂË£¬²»ÐèÒª´«µ½ºǫִ́ÐÐ this.ShowMessage(this.GetText("DoFilter")); var T = this; setTimeout(function(){ T.DoFilterT(BIE8Strict&&T.RowSpan||T.Paging?2:1); T.HideMessage(); },10); } else this.DoFilterT(1); } // ----------------------------------------------------------------------------------------------------------- // Colors all filter according to their activity TGP.ColorFilterCells = function(noshow){ var F = this.GetFixedRows(); for(var i=0;i1) this.RemovePages(); ME.Paging; if(show==1 && this.HiddenBody) { this.HiddenBody = null; for(var i=this.FirstSec;ithis.SynchroCount) show = 2; if(fh&&show!=1){ for(var i=0;i=0;i--){ var r = S[i]; if(r.firstChild && r.Expanded&2) { r.Expanded &= ~2; if(r.Hasch) this.UpdateChildrenLevel(r); } } } if(!show) { MS.Debug; this.StopTimer("Filter"); ME.Debug; if(Grids.OnFilterFinish) Grids.OnFilterFinish(this,this.Loading?1:2); return; } if(show==1){ this.Rendering = 1; var clrsel = this.ClearSelected&2, dyb = this.DynamicBorder; for(var i=0;i=0;i--){ var r = S[i]; MS.Animate; if(r.Animating||r.AnimatingCells) this.AnimRow(r); ME.Animate; this.TableShowRow(r,1); if(r.Hasch && fh && r.Expanded&2) { r.Expanded &= ~2; this.UpdateChildrenLevel(r); if(!this.HideTree) this.SetWidth(this.MainCol,0,1,r); } if(r.Expanded && r.HasF) this.Expand(r,true,0,1); if(r.parentNode.Expanded && r.parentNode.Visible) this.TableExpand(r.parentNode); if(r.Hasch && r.Expanded) { if(r.HasF) this.TableExpand(r); else this.TableCollapse(r); } r.HasF = null; } if(CF) for(var i=0;i=0 && I.Name<=12){ if(!I.Text) I.Text = T.Lang["MenuFilter"]["F"+I.Name]; I.LeftHtml = "
"+CNBSP+"
"; } else if(I.Items) Init(I.Items); } } var T = this; TMenu.InitMenu(M); Init(M.Items); } else { M.Items = []; var it = Get(row,col+"MenuItems"); if(it){ it = (it+"").split(","); for(var n=0;n=0 && i<=12){ M.Items[M.Items.length] = { Name:i, Text:this.Lang["MenuFilter"]["F"+i], LeftHtml:"
"+CNBSP+"
" }; } } } else { var typ = this.GetType(row,col), a; if(typ=="Bool") a = 3; else if(CAlignRight[typ]) a = 7; else a = 13; for(var i=0;i"+CNBSP+"" }; } } defs = Get(row,col+"FilterDefs"); if(defs){ defs = defs.split(","); var cap = this.Lang["MenuFilter"]["Defs"+(defs.length==1?"1":"")], def = this.GetAttr(row,col,"FilterDef"), d = {}; if(def){ def = def.split(","); for(var i=0;i 5 ? ["Ok","Clear","Cancel"] : ["Ok","Cancel"]; M.Texts = this.Lang.MenuButtons; } } } if(!M.MinWidth) M.MinWidth = 0; if(M.Class==null) M.Class = this.Img.Style+"FilterMenu"; if(M.CloseClickHeader==null) M.CloseClickHeader = 1; if(M.ShowCursor==null) M.ShowCursor = 0; M.Cursor = Get(row,col+"Filter"); if(!M.Cursor) M.Cursor = 0; if(M.Header==null && !this.GetRotate(row,col) && (!this.Scale||this.Scale==1) && !this.ScaleX) M.Header = "
"+CNBSP+"
"; var P = this.CellToWindow(arow?arow:row,col,row[col+"Button"]=="Filter"?0:4); P.X = P.AbsX; P.Y = P.AbsY; P.AlignHeader = CAlignTypes[row[col+"IconAlign"]]=="Right"||row[col+"Button"]=="Filter"?"right middle":"left middle"; var T = this; M.OnCSave = function(I,V){ if(V&&defs){ for(var i=0,v={};i0 ? def : ({"Text":1,"Lines":1,"Link":1,"Img":1}[this.GetType(F,col)] ? 11 : 1))) return false; if(menu && !this.ShowFilterMenu(F,col,menu==2?1:0,1) || menu==1 && !F.Visible) return false; if(test) return true; val = this.GetValueInput(row,col,val); this.FinishEdit(F,col,val,menu?-1:-2); if(menu) this.ShowFilterMenu(F,col,menu==2?1:0,0,F.Visible?null:row); return true; } // ----------------------------------------------------------------------------------------------------------- TGP.ActionClearFilter = function(F,T){ var A = this.GetACell(F); if(!A) return false; var row = A[0], col = A[1]; if(row.Space) return false; var A = this.GetFilterRows()[0]; if(!A||!A[col+"Filter"]) return false; if(T) return true; this.SetFilterOp(A,col); return true; } // ----------------------------------------------------------------------------------------------------------- TGP.ActionClearFilters = function(dummy,T){ var F = this.GetFilterRows()[0]; if(!F) return false; var ok = 0; for(var c in this.Cols) if(F[c+"Filter"]) { ok = 1; break; } if(!ok) return false; if(T) return true; this.ChangeFilter(); return true; } // ----------------------------------------------------------------------------------------------------------- TGP.UpdateRelatedFilter = function(row,col){ var rel = this.GetAttr(row,col,"Related"); if(rel && row[col+"Filter"]){ rel = rel.split(","); for(var i=0;ithis.SynchroCount) && (!(this.OnePage&2) || this.AllPages)){ this.ShowMessage(this.GetText("DoFilter")); var T = this; setTimeout(function(){ if(T.Paging&&!val) { T.Filtered = 0; T.FinishAnimations(); T.Filtered = 1; } T.DoFilterT(BIE8Strict&&T.RowSpan||T.Paging ? 2 : 1); T.HideMessage(); if(!val){ T.Filtered = 0; T.Filter1 = F1; } },10); } else { this.DoFilterT(1); this.HideMessage(); if(!val){ this.Filtered = 0; this.Filter1 = F1; } } return true; } // ----------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------- MS.Range; TGP.FilterTextRange = function(col,val,name,show,ssep){ var sep = this.Lang.Format.ValueSeparator; if(!name) name = "F3"; if(val) { val = (val+"").split(sep); for(var i=0;i=0"; } else F = ""; this.SetFilter(name,F,col,show,1); } ME.Range; // ---------------------------------------------------------------------------------------------------------- MS.Range; TGP.FilterDateRange = function(col,val,name,show){ if(!name) name = "F3"; var F; if(val) { val = this.ConvertDate(val,null,null,0).split(this.Lang.Format.ValueSeparator); for(var i=0;ithis.SynchroCount) && (!(this.OnePage&2) || this.AllPages) ? 2 : 1):0); if(this.SaveFilters) this.SaveCfg(); } } // ----------------------------------------------------------------------------------------------------------- TGP.GetFilter = function(spec){ if(spec){ var A = [], F3N = this.Filter3Names; if(F3N) for(var i=0;i