代码点滴收获 (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、自定义控件之下拉式属性显示:
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")]