//树控件。
TreeNode node = new TreeNode(function[i].Function1);
treeView1.Nodes.Add(node);
for (int j = 0; j < function.Count; j++)
{
if (function[i].Id == function[j].Uid)
{
TreeNode nod = new TreeNode(function[j].Function1);
node.Nodes.Add(nod);
for (int z = 0; z < function.Count; z++)
{
if (function[j].Id == function[z].Uid)
{
TreeNode n = new TreeNode(function[z].Function1);
nod.Nodes.Add(n);
}
}
}
//年月日的正则。
regex = new Regex(@"(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])");
// 倒置字符串
static public string Reverse( string s ) { char[] charArray = s.ToCharArray();
Array.Reverse( charArray );
return new string( charArray );
}
找出是否存在某個窗體FORM
for (int j = 0; j < Application.OpenForms.Count; j++)
{
if (Application.OpenForms[j].Name.Equals("FNO31000"))
{
fno3100 = true;
}
}
If (fno3100 = true)
FNO31000 fno = (FNO31000)Application.OpenForms["FNO31000"]
遍歷control
private void PanelClear(Control c)
{
foreach (Control cc in c.Controls)
{
if (cc.GetType() != typeof(Panel))
{
PanelClear(cc);
}
else
{
((Panel)cc).Visible = false;
}
}
}
control写了个扩展方法,按回车发送tab键的
public static class ControlExtensions
{
public static void SendTabKey(this Control control, Keys key)
{
if (key == Keys.Enter)
SendKeys.Send("{TAB}");
}
}
尽量使用强类型集合(包括泛型集合),而非DataTable
using(SqlDataReader reader = SqlHelper.ExecuteReader(cmd)) {
Ilist<EmployeeInfo> list = new List<EmployeeInfo>();
while(reader.read()) {
list.add(new EmployeeInfo(
reader.getInt32(0)
// 其它字段
));
}
}
DataGriderView 自动排序
软件开发技术交流中心:
http://tieba.baidu.com/club/8875975/invite/join/?c=124943206246a9d11532af7a500c022516236f291915
Asp.net(C#)
/// <summary>
///DataGriderView 自动排序
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
protected void GVData_Sorting(object sender, GridViewSortEventArgs e)
{
try
{
// 从事件参数获取排序数据列
string sortExpression = e.SortExpression.ToString();
// 假定为排序方向为“顺序”TechWeb-技术社区
string sortDirection = "ASC";
// “ASC”与事件参数获取到的排序方向进行比较,进行GridView排序方向参数的修改#p&V4u#o4C
if (sortExpression == this.GVData.Attributes["SortExpression"])
//获得下一次的排序状态
sortDirection = (this.GVData.Attributes["SortDirection"].ToString() == sortDirection ? "DESC" : "ASC");
// 重新设定GridView排序数据列及排序方向
this.GVData.Attributes["SortExpression"] = sortExpression;
this.GVData.Attributes["SortDirection"] = sortDirection;
}
catch (Exception ex)
{
MessageBox(ex.Message);
}
}
/// <summary>
/// 错误消息提示
/// </summary>
/// <param name="messageStr"> </param>
public void MessageBox(string messageStr)
{
Response.Write(" <script>alert('" + messageStr + "') </script>");
}
获取html源文件中所有a标记, 且分离出其中的href地址以及innerText 内容
string x =“获取的网站html代码”;
Regex r = new Regex(" <a.*?href=[\"\']{0,1}(? <h>.*?)(?= |\"|\'|>)(.*?>)(? <inner>.*?) </a>");
MatchCollection ms = r.Matches(x);
Console.WriteLine(ms.Count);
foreach (Match m in ms)
{
Console.WriteLine("all:" + m.Groups[0].Value);
Console.WriteLine("href:" + m.Groups["h"].Value);
Console.WriteLine("inner:" + m.Groups["inner"].Value);
Console.WriteLine();
}
条款1:使用属性代替可访问的数据成员
条款2:运行时常量(readonly)优于编译时常量(const)
条款3:操作符is或as优于强制转型
条款4:使用Conditional特性代替#if条件编译
条款5:总是提供ToString()方法
条款6:明辨值类型和引用类型的使用场合
条款7:将值类型尽可能实现为具有常量性和原子性的类型
条款8:确保0为值类型的有效状态
条款9:理解几个相等判断之间的关系
条款10:理解GetHashCode()方法的缺陷
条款11:优先采用foreach循环语句
条款12:变量初始化器优于赋值语句
条款13:使用静态构造器初始化静态类成员
条款14:利用构造器链
条款15:利用using和try/finally语句来清理资源
条款16:尽量减少内存垃圾
条款17:尽量减少装箱与拆箱
条款18:实现标准Dispose模式
条款19:定义并实现接口优于继承类型
条款20:明辨接口实现和虚方法重写
条款21:使用委托表达回调
条款22:使用事件定义外发接口
条款23:避免返回内部类对象的引用
条款24:声明式编程优于命令式编程
条款25:尽可能将类型实现为可序列化的类型
条款26:使用IComparable和IComparer接口实现排序关系
条款27:避免ICloneable接口
条款28:避免强制转换操作符
条款29:只有当新版基类导致问题时才考虑使用new修饰符
条款30:尽可能实现CLS兼容的程序集
条款31:尽可能实现短小简洁的函数
条款32:尽可能实现小尺寸、高内聚的程序集
条款33:限制类型的可见性
条款34:创建大粒度的Web API
条款35:重写优于事件处理器
条款36:合理使用.NET运行时诊断
条款37:使用标准配置机制
条款38:定制和支持数据绑定
条款39:使用.NET验证
条款40:根据需要选用恰当的集合
条款41:DataSet优于自定义结构
条款42:利用特性简化反射
条款43:避免过度使用反射
条款44:为应用程序创建特定的异常类
条款45:优先选择强异常安全保证
条款46:最小化互操作
条款47:优先选择安全代码
条款48:掌握相关工具与资源
条款49:为C# 2.0做准备
条款50:了解ECMA标准