开发中遇到的点滴 (2/2010)
2010-02-17 by 嘉瑜, Category: 码农日记, Tags: 开发点滴 No Comments 36次浏览
枚举,
自定义控件之TypeConverter,
Javascript格式化数值,
Context.Handler,
如何在自定义控件的CSS中引入资源图片
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格式化数字字符串的方法(有修改)
即: 使用时 format("12345678901","###,###,###,###,###,###.00");
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;
};
6、 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.
7、how to load datareader to datatable?
datareader dr = getdr(); datatable dt = new datatable(); dt.load(dr);
8、使用context.handler将整个页面作为参数传递过去
有时希望在页面显示之前编辑的成功信息,又不希望在那次编辑后仅用繁杂的页面控件重置(我们知道那viewstate有时让人想吐),howto?
1). 先给litmsg赋值,
2). 再使用 server.transfer(this.page.request.rawurl);
3). 在!ispostback代码部分使用, litmsg.text = ((literal) ((page) context.handler).findcontrol("litmsg")).text;
9、如果需要完成如下功能:
1) 客户端window.open
2) 同时服务器端要处理session
做法:
先form.submit(),在此之前记得带值到response.form,在post back中判断后处理session,再register.clientscript打开一个新页面。 ps.记得window.open应该用clientstartup在c#页面里面做
10、一个奇怪的现象,只能用linq解决了
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、要在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")]
Tags: 开发点滴


