代码点滴收获 (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格式化字符串的方法(有修改)

代码
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的数据与服务器端数据传递方法(以自定义控件为例)

代码

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
做法:

代码
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

代码
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")]

 

posted @ 2010-02-22 13:55  Elaine Shi  阅读(286)  评论(0编辑  收藏  举报