1.字符串比较用 equals,常量放前面,变量放后面,这样不用先判断变量是否为空
2. dataTable.copy();//复制结构和数据
dataTable.clone();//仅复制结构,不复制数据
3.BeginInit和EndInit
如果一个组件实现ISupportInitialize接口,那么设计器就会生成BeginInit和EndInit。
该接口的最大作用就是,把多个BeginInit和EndInit之间的命令当成一锤子买卖来对待。
假设一个类,有个最大值和当前值,限定当前值不能大于最大值。
难题是设计器很难保证要首先设置最大值,然后再设置当前值(可能其他控件也会设置My实例)。
如果支持了ISupportInitialize,那么My类就理解现在还是初始化阶段,不用麻烦去检查错误,不用麻烦去处理每个变动
4.用户控件和自定义组件和窗体
用户控件:自定义的可重用组件,易于创建,如果控件有大量静态布局,用户控件是首选,不可添加到工具箱
自定义组件:也是可重用组件,用代码创建,比较难创建userControl类,易用性更强,可添加到工具箱,被编译成dll
窗体:上述两者的容器
5.DataTable 和 DataView 互相转换
DataView view = DataTable.DefaultView;
view.RowFilter = "BANKNO='5002'";//DataView 查询条件
view.Sort = "CHANNELID,NETPOINT,BANKNO,PAYWAY";//DataView 排序
DataTable.DataSource = view.Table;
6.添加弹框
MessageBox.Show("当前工作日TA已完成清算", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
7.添加选择弹框
DialogResult dateMessage = XtraMessageBox.Show(string.Format("文件头账单生成日期:{0}与当前交易日:{1}不一致,是否继续对账?", "1", "1"), "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dateMessage == DialogResult.No)
{
return;
}
8.计时功能
System.Diagnostics.Stopwatch singleStopwatch = new System.Diagnostics.Stopwatch();
singleStopwatch.Reset();singleStopwatch.Start();
singleStopwatch.Stop();
singleStopwatch.Elapsed.TotalSeconds;
9.操作文件夹
//判断该目录是否存在,不存在则创建
if (!Directory.Exists(localDir))
{
Directory.CreateDirectory(localDir);
}
Directory.GetFiles(localDir)//获取文件目录下所有文件
10.一行行得读txt文件
while (!file.EndOfStream)
{
var _row = file.ReadLine();
if (_rowNum == 1)
{
_row = System.Text.RegularExpressions.Regex.Replace(_row, @"\s+", "|"); //把空格转换成 | 以便后面截取字符串,替换字符必须在原字符串中没有出现
tradeNum = _row.Split('|')[0] is null ? ":0" : _row.Split('|')[0];//截取到交易总笔数字段
tradeNum = tradeNum.Split(':')[1] is null ? "0" : tradeNum.Split(':')[1];
log.Info(string.Format("快钱对账文件交易总笔数:{0}", tradeNum))
}
}