代码点滴收获 (2010年2月)

近来开发的所学到的如下:

0、jQuery与Autocomplete插件
1.1、将枚举转为string[]
private enum MyEnum
{A,B,C}
string[] var = Enum.GetNames(typeof(MyEnum)); // "A""B""C"的数组
string var2 = MyEnum.A.ToString(); //"A"
1.2、将string[]转成enum

Aircraft air = (Aircraft) Enum.Parse(typeof(Aircraft), "A,B,C", true); 


2、自定义控件之下拉式属性显示:
[TypeConverter( typeof (ModuleConverter))]
public   string  Module{ get {} set {}}

 

#region  TypeConverter
    
public   class  DataSourceTypeConverter : StringConverter
    {
        StandardValuesCollection theValue 
=   new  StandardValuesCollection(Enum.GetNames( typeof (Enums.EnumDataSource)));

        
// 这一个override说明要用下拉列表编辑属性 
         public   override   bool  GetStandardValuesSupported(ITypeDescriptorContext context)
        {
            
return   true ;
        }
        
// 这个override返回下拉列表项
         public   override  StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
        {
            
return  theValue;
        }
        
// return ture的话属性只能选,return false 属性可选可填 
         public   override   bool  GetStandardValuesExclusive(ITypeDescriptorContext context)
        {
            
return   true ;
        }
    }

4、判断字符串拼接成的方法名是否存在
//一般来说 if (typeof(functionName) == "function") 就可,若是拼接成的呢?
//
在IE和FF下试过均OK
if ("functionName"in Window) {}

5、Javascript格式化字符串的方法(有修改)

ExpandedBlockStart.gif 代码
var  format  =   function  (number, form) {
    
var  forms  =  form.split( ' . ' ), number  =   ''   +  number, numbers  =  number.split( ' . ' )
        , leftnumber 
=  numbers[ 0 ].split( '' )
        , exec 
=   function  (lastMatch) {
            
if  (lastMatch  ==   ' 0 '   ||  lastMatch  ==   ' # ' ) {
                
if  (leftnumber.length) {
                    
return  leftnumber.pop();
                } 
else   if  (lastMatch  ==   ' 0 ' ) {
                    
return  lastMatch;
                } 
else  {
                    
return   '' ;
                }
            } 
else  {
                
return  lastMatch;
            }
    }, string

    string 
=  forms[ 0 ].split( '' ).reverse().join( '' ).replace( / . / g, exec).split( '' ).reverse().join( '' );
    string 
=  leftnumber.join( '' +  string;

    
if  (forms[ 1 &&  forms[ 1 ].length) {
        leftnumber 
=  (numbers[ 1 &&  numbers[ 1 ].length)  ?  numbers[ 1 ].split( '' ).reverse() : [];
        string 
+=   ' . '   +  forms[ 1 ].replace( / . / g, exec);
    }
    
var  ret  =  string.replace( / \.$ / '' );

    
// Modified, debugger;
     var  i  =   0 ;
    
var  j  =   0 ;
    
while  (i  ==   0   &&  j < 10 ){
        j
++ ;
        i 
=  ret.indexOf( ' , ' );
        ret 
=  ret.substring(i + 1 ,ret.length);
        i 
=  ret.indexOf( ' , ' );
    }
    
return  ret;
};
//  使用时 format("12345678901","###,###,###,###,###,###.00");

< script language = " javascript "  type = " text/javascript "  src = " ../Js/StringFormat.js " >< / script>
< script language = " javascript "  type = " text/javascript " >
function  $(value) {  return  document.getElementById(value);}
function  CalculateTotal(){
    
var  fmt  =   " ###,###,###,###,###,###.00 " ;
    
var  gridID  =   " <%=POReleaseGridView.ClientID %> " ;
    
var  lblGrandTotal  =  $( " ClientSpan " );
    
var  tblPO  =  $(gridID);
    
var  rowCount  =  tblPO.rows.length;

    
//  ctl00_mdcmContentPlaceHolder_POReleaseGridView_ctl02_QtyTextBox
     //  ctl00_mdcmContentPlaceHolder_POReleaseGridView_ctl02_UsePremiumRadioButtonList_0

    
var  rowID  =   "" ;
    
var  Qty;
    
var  UnitPrice;
    
var  PreCharge;

    
var  cbPremiumYes;
    
var  cbPremiumNo;
    
var  lblTotal;

    
var  calTotal  =   0 ;

    
//  formula:
     //  if preCharge enabled and if preCharge larger than 100: ( qty * price ) * ( preCharge / 100 );
     //  else qty * price
     for  ( var  i  =   0 ; i  <  rowCount; i ++ ){
        rowID 
=  gridID  +   " _ctl "   +  ((i  <=   9 ) ?   " 0 "   +  i : i);
        
if  (i  <   2   ||  i  >=  rowCount) { continue ;}

        
//  Get the controls relavent with total
        Qty  =  getNum($(rowID  +   " _QtyTextBox " ));
        UnitPrice 
=  getNum($(rowID  +   " _unitPriceTextBox " ));
        PreCharge 
=  getNum($(rowID  +   " _PremiumTextBox " ));

        lblPreCharge 
=  $(rowID  +   " _PremiumTextBox " );
        cbPremiumYes 
=  $(rowID  +   " _UsePremiumRadioButtonList_0 " );
        cbPremiumNo 
=  $(rowID  +   " _UsePremiumRadioButtonList_1 " );

        lblTotal 
=  $(rowID  +   " _TotalLabel " );

        
//  ===
         var  tmp  =  Qty  *  UnitPrice;
        
if  (cbPremiumYes.checked  &&  PreCharge  >   100 ){
            tmp 
=  tmp  *  (PreCharge  /   100 );
        }

        lblTotal.innerHTML 
=  format(tmp, fmt);
        calTotal 
+=  tmp;
     }

     lblGrandTotal.innerHTML 
=  format(calTotal, fmt);
}

function  getNum(ctrl){
    
return  (ctrl.value  ==   ""   ?   0  : parseFloat(ctrl.value));
}
< / script>

6、Client-Side的数据与服务器端数据传递方法(以自定义控件为例)

ExpandedBlockStart.gif 代码

public   int  SelectedID
{
    
get
    {
        
//  客户端 -> 服务器端:
        
//  Get it from client-side (hidden field)
         if  ( this .Page.IsPostBack  &&   this .Page.Request.Form[ this .HiddenID_CtrlID]  !=   null )
        {
            ViewState[
this .VSNameSelectedID]  =   this .Page.Request.Form[ this .HiddenID_CtrlID];
        }

        
if  ( null   ==  ViewState[ this .VSNameSelectedID]) {  return   - 1 ; }
        
try
        {
            Convert.ToInt32(ViewState[
this .VSNameSelectedID]);
        }
        
catch  (Exception ex)
        {
            ViewState[
this .VSNameSelectedID]  =   " -1 " ;
        }

        
return  Convert.ToInt32(ViewState[ this .VSNameSelectedID]);
    }
    
set
    {
        
//  服务器 -> 客户端
        ViewState[ this .VSNameSelectedID]  =  value;

        
//  set the client script to change the value (ignored, in fact)
         this .ScriptSpecial  =  GetScriptSetCtrol(value,  this .Text,  false );
    }
}

///   <summary>
///  Get the Client-side javascript and render it to HTML
///   </summary>
///   <param name="_item"></param>
///   <returns></returns>
public   string  GetScriptSetCtrol( int  id,  string  name,  bool  isCreateObject)
{
    
//  1. create/modify the instantialized client-side object
    
//  2. specify modified "SelectedID" to its hidden field 
     return   string .Format( " {0} {1} = new ACTextBox(\ " { 2 }\ " ,\ " { 3 }\ " );document.getElementById('{4}').value = '{2}'; " ,
                         isCreateObject 
?   " var  "  :  string .Empty,
                         
this .ACBoxID,
                         id, name,
                         
this .HiddenID_CtrlID);
}

//  Render出去
protected   override   void  Render(HtmlTextWriter writer)
{
        writer.WriteLine(
string .Format( @" <script language='javascript' type='text/javascript'>{0}</script> " , strScript_Create  +  strScript_Initailization  +   this .ScriptValidate  +   this .ScriptSpecial));

        
base .Render(writer);
}

7、 Set cursor position to textbox's last place 
var v = tbID.value;
tbID.value 
= '';
tbID.value 
= v;

The value exchange js codes can make it.


8、How to load datareader to DataTable?  
DataReader dr = getDR();
DataTable dt 
= new DataTable();
Dt.Load(dr);

9、使用Context.Handler将整个页面作为参数传递过去

10、如果需要完成如下功能:
1) 客户端window.open
2) 同时服务器端要处理session
做法:

ExpandedBlockStart.gif 代码
input type = button;

JS:
//  submit form to capture in session.  
theform.HidAction.value  =   " Customize " ;
theform.submit();

C#:
if  (Page.IsPostBack  &&  HidAction.Value  ==   " Customize " )
{
    System.Web.HttpContext.Current.Session[
" SelectedUsers " =  HidSelectedPermissions.Value;
}

PS.上面的window.open应该用clientstartup在C#页面里面做 

10、string.Join( ",", ( from groupId in groupIDs select groupId.ToString() ).ToArray<string>() )

决定学LINQ了...
很奇怪的是,从ArrayList al = .. ; al.ToArray(typeof(int)) as int 都会出错,就算AL里面每一项都确保是int也不行,必须得用这个LINQ语句 >"<
(from i in al.ToArray() select convert.toint32(i) ) .ToArray<int>()

才行 

11、使用datareader时,尽量使用dr.HasRow来代替if (dr != null) 。这样可以避免因传入parameter有误而使dr为null,不知道为什么,param传入有误时,executedatereader并不报错。  

12、try to use string.IsNullOrEmpty(strTemp)  

13、Oracle找object很容易,MSSQL就不知道了,hope the sql below will be helpful

ExpandedBlockStart.gif 代码
SELECT      a.name  AS  columnname,  object_name (a.id)  AS  tablename
FROM        syscolumns  AS  a, sysobjects  AS  b, systypes  AS  c
WHERE       a.name = ' DeleteTime '   AND  a.id = b.id  AND  a.xtype = c.xtype  AND  b.xtype = ' u '

14、要在server side control中包含CSS,且CSS中又有图片,用PerformSubstitution = true,如:
[assembly: WebResource("Broadcom.CSP.Ctrl.AutoCompleteBox.jquery.autocomplete.css""text/css", PerformSubstitution = true)]
[assembly: WebResource(
"Broadcom.CSP.Ctrl.AutoCompleteBox.IconSearch.png""image/png")]
[assembly: WebResource(
"Broadcom.CSP.Ctrl.AutoCompleteBox.indicator.gif""image/gif")]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值