第一组:陈辉 DB里面一个字段多种查询条件的方法:
quue.AddSearch(new DbSearchField(DbUnionCondition.And,
new DbSearchField(EHrAssAttendance.AD_ActAttStatus,DbSearchTypeEnum.Equal,AR_AttResultEnum.Late,true,DbUnionCondition.Or),
new DbSearchField(EHrAssAttendance.AD_ActAttStatus,DbSearchTypeEnum.Equal,AR_AttResultEnum.Early,true,DbUnionCondition.Or),
new DbSearchField(EHrAssAttendance.AD_ActAttStatus,DbSearchTypeEnum.Equal,AR_AttResultEnum.AbsentHalfDay,true,DbUnionCondition.Or),
new DbSearchField(EHrAssAttendance.AD_ActAttStatus,DbSearchTypeEnum.Equal,AR_AttResultEnum.AbsentOneDay,true,DbUnionCondition.Or)));
第二组:叶佳意 nginx配置
由浏览器的同源策略,浏览器不能执行其他网站的脚本,此时需要解决跨域问题。用nginx反向代理实现跨域,是最简单的跨域方式,只需要修改nginx的配置即可解决跨域问题。我们只需要配置nginx,在一个服务器上配置多个前缀来转发http/https请求到多个真实的服务器即可。这样,这个服务器上所有url都是相同的域名、协议和端口。因此,对于浏览器来说,这些url都是同源的,没有跨域限制。而实际上,这些url实际上由物理服务器提供服务。这些服务器内的javascript可以跨域调用所有这些服务器上的url。
如图1-1所示,为nginx文件结构。
全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
server块:配置虚拟主机的相关参数,一个http中可以有多个server。
location块:配置请求的路由,以及各种页面的处理情况。
以下是掌上长龙的nginx配置详情及注释:
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;
#工作模式及连接数上限
events {
#单个后台worker process进程的最大并发链接数
worker_connections 1024;
}
http {
#设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
#对于普通应用,必须设为 on,
#如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
#以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
#设定虚拟主机配置
server {
#侦听3000端口
listen 3000;
#定义使用 127.0.0.1访问
server_name 127.0.0.1;
#请求WebHandler.ashx时访问http://172.25.1.18:10007;后台
location ~* ^/WebHandler.ashx$ {
#proxy_pass https://test-palm-api.loongair.cn;
proxy_pass http://172.25.1.18:10007;
#控制上传文件大小为1000M
client_max_body_size 1000m;
}
#默认请求
location / {
proxy_pass http://127.0.0.1:3005;
}
}
}
第三组:吴景霞 C#用反射实现两个类的对象之间相同属性的值的复制
在进行实体转换操作的时候如果需要在对两个实体之间两个属性字段差不多相同的类要进行一个互相的转换,我们要把a对象的所有字段的值都复制给b对象,我们只能用b.属性=a.属性来写,如果属性字段太多的话,就要写很多行复制语句,麻烦还容易漏掉一些,这个时候可以利用c#的反射来实现复制。我们可以写这样一个利用泛型的映射函数。
适用于创建实体的时候从一个实体作为数据源赋值
/// <summary>
/// 反射实现两个类的对象之间相同属性的值的复制
/// 适用于初始化新实体
/// </summary>
/// <typeparam name="D">返回的实体</typeparam>
/// <typeparam name="S">数据源实体</typeparam>
/// <param name="s">数据源实体</param>
/// <returns>返回的新实体</returns>
public static D Mapper<D, S>(S s)
{
D d = Activator.CreateInstance<D>(); //构造新实例
try
{
var Types = s.GetType();//获得类型
var Typed = typeof(D);
foreach (PropertyInfo sp in Types.GetProperties())//获得类型的属性字段
{
foreach (PropertyInfo dp in Typed.GetProperties())
{
if (dp.Name == sp.Name && dp.PropertyType == sp.PropertyType && dp.Name!= "Error" && dp.Name != "Item")//判断属性名是否相同
{
dp.SetValue(d, sp.GetValue(s, null), null);//获得s对象属性的值复制给d对象的属性
}
}
}
}
catch (Exception ex)
{
throw ex;
}
return d;
}
适用于没有创建实体,两个实体之间数据的转换
/// <summary>
/// 反射实现两个类的对象之间相同属性的值的复制
/// 适用于没有新建实体之间
/// </summary>
/// <typeparam name="D">返回的实体</typeparam>
/// <typeparam name="S">数据源实体</typeparam>
/// <param name="d">返回的实体</param>
/// <param name="s">数据源实体</param>
/// <returns></returns>
public static D MapperToModel<D, S>(D d,S s)
{
try
{
var Types = s.GetType();//获得类型
var Typed = typeof(D);
foreach (PropertyInfo sp in Types.GetProperties())//获得类型的属性字段
{
foreach (PropertyInfo dp in Typed.GetProperties())
{
if (dp.Name == sp.Name && dp.PropertyType == sp.PropertyType && dp.Name != "Error" && dp.Name != "Item")//判断属性名是否相同
{
dp.SetValue(d, sp.GetValue(s, null), null);//获得s对象属性的值复制给d对象的属性
}
}
}
}
catch (Exception ex)
{
throw ex;
}
return d;
}
第四组:傅云 有规律的长字符串分割换行排序方法
若我们的字符串是有,或者;等有规律的排序的话,在页面中显示会出现排律不整齐或者自动断行换行的情况,故可采用将字符串分割后放入表格中的方法解决。
放入表格的方法可采用JS的自动拼接。
效果如下:
第五组:王颢
gridcontrol列格式化
eg:单元格添加颜色
在gridView1的RowCellStyle事件中添加如下代码:
if (e.RowHandle != bandedGridView1.FocusedRowHandle &&((e.RowHandle % 2 == 0 && e.Column.VisibleIndex % 2 == 1) ||(e.Column.VisibleIndex % 2 == 0 && e.RowHandle % 2 == 1)))
e.Appearance.BackColor = Color.AliceBlue;
参考网址
http://blog.csdn.net/u013457167/article/details/42478857
winform关于AcceptButton和CanceleButton的问题
- Form.AcceptButton 属性:取得或设定使用者按下 ENTER 键时所按下的表单上按钮,指派至这个属性的按钮必须是在目前表单上或位于目前窗体上容器内的IButtonControl(也就是只有按钮能用它)
private void Form1_Load(object sender, EventArgs e)
{
this.AcceptButton = this.button2;
this.CancelButton = this.button3;
}
详细看MSDN
这个属性允许您指定当用户在应用程序中按下 ENTER 键时所发生的预设动作。指派至这个属性的按钮必须是在目前窗体上或位于目前窗体上容器内的 IButtonControl。
您可以使用这个属性允许用户在完成时轻易地按下 ENTER 键,代替用鼠标手动地单击接受按钮,好让他们能够快速地巡览简单窗体。
如果目前在窗体上选取的控件会拦截 ENTER 键并作处理,则不可以启动接受按钮。例如,当选取它以插入换行符 (New Line Character) 至控件中时,多行文本框控件允许按下 ENTER 键。
想象一下如果用户在 textBox 填好数据后,不用鼠标,按 Enter 就能执行下一步的动作,是不是蛮方便的。
Form.CancelButton 属性:取得或设定使用者按下 ESC 键时所按下的按钮控件。
Form.AcceptButton 属性 :就是在抓你按下Enter键后,所要执行的按钮事件,经我实测发现这鬼东西在Form上的焦点要在非按钮上才有用喔!搭配 Focus方法 弹性又更大了。
Form.CancelButton 属性:不受控件的Focus影响,不管在哪按ESC都能很正常的工作。
范例如下:
static int j=1;
static int i=1;
static int k = 1;
private void Form1_Load(object sender, EventArgs e)
{
this.AcceptButton = this.button1;
this.textBox1.Focus();
this.textBox1.Select();
this.CancelButton = this.button3;
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "按下了 button1: " +j.ToString()+" 次";
this.textBox2.Focus();
//this.textBox2.Select();
j++;
this.AcceptButton = this.button2;
}
private void button2_Click(object sender, EventArgs e)
{
textBox2.Text = "按下了 button2: " +i.ToString()+" 次";
this.textBox1.Focus();
//this.textBox1.Select();
i++;
this.AcceptButton = this.button1;
}
private void button3_Click(object sender, EventArgs e)
{
textBox3.Text = "按下了 ESC: " + k.ToString() + " 次";
k++;
}