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、自定义控件之下拉式属性显示:
public string Module{ get {} set {}}
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 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
做法:
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
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")]