C#实例应用总结(一)html
本人没有系统学习过,C#,只是在工做中积累了一些,为了方便之后开发中使用,在此作一下总结,若有不对的地方,欢迎各位观众多多批评与指正!java
您的意见,才能使你们更好的进步!望不吝指教!sql
概念就不说了,有兴趣的话,能够留言,之后再加上!数据库
工具用的是VS2013,后台用的java数组
1、gridView的增删改查,ide
一、查询工具
根据sql查询,post
ServiceFactory.CreateService<IDeptParameterService>().queryWaitParameter(param).Then(list =>
{
this.gridControl1.DataSource = list;
});学习
ServiceResult<List<WaitParVo>> queryWaitParameter(string pkDept);字体
IDeptParameterService是个人service类,里面只写方法,页面的上方法体里,用“.”的方式,能够调用出本身写的方法,
list 用list变量来接收
this.gridControl1.DataSource = list;赋值给你要显示的gridControl的列表上的数据源,列表上写好对应的名称便可!
ServiceResult<List<WaitParVo>> queryWaitParameter(string pkDept);是service层的方法,
WaitParVo为该列表对应的实体类,
string pkDept为参数,
queryWaitParameter方法名。
二、新增
gridView常常会用到新增的时候,在这里,提供两种方法,(固然也但愿各位观众有更好的方法,多多指教。)
这两种也是视条件来决定,有一种,只插入数据库的方式,而后,刷新页面,即新增一行。下面会细讲!
主要讲第二种,
gridView1.AddEmptyRow<WaitParVo>(row => string.IsNullOrEmpty(row.Code), new WaitParVo
{
Code = ar.CodeArgu,
Name = ar.NameArgu,
PkOrg = AppContext.Session.OrganizationId,
});
AddEmptyRow为新增一行的方法,
WaitParVo,该gridView对应的实体类
row 变量名,
string.IsNullOrEmpty(row.Code)是否为空判断
{}里面为须要给列表赋的值。
可根据实际状况改变。
其中ar是什么?
这段代码是我从本身的项目上粘出来的,讲一下,为何这么写
我当时的需求是这样的

点击右箭头,变成这样

点击》按钮,左侧列表所有移动到右侧,《和<同理
左侧列表为gridControl1,右侧为GridControl2
var ar = this.gridView2.GetFocusedRow() as ArguVo;
if(ar == null){
MessageBoxUtils.Hint("没有已选参数了");
return;
}
gridView1.AddEmptyRow<WaitParVo>(row => string.IsNullOrEmpty(row.Code), new WaitParVo
{
Code = ar.CodeArgu,
Name = ar.NameArgu,
PkOrg = AppContext.Session.OrganizationId,
});
int rowindex = gridView2.FocusedRowHandle;
gridView2.DeleteRow(rowindex);
左右同理,先获取到列表的光标选中行this.gridView2.GetFocusedRow() as ArguVo;
用变量来接收,增长以后,把获取到的值,赋值给另外一个列表的对应字段。
int rowindex = gridView2.FocusedRowHandle;获取选中行的下标,根据选中行的下标删除。完成移动的操做!
在写》的方法
private List<WaitParVo> WList;
private List<ArguVo> AList;
List<ArguVo> s = this.AList;
List<WaitParVo> d = this.WList;
if (d == null || d.Count < 1)
{
MessageBoxUtils.Hint("待选参数已全选");
return;
}
foreach (var g in d)
{
gridView2.AddEmptyRow<ArguVo>(row => string.IsNullOrEmpty(row.CodeArgu), new ArguVo
{
CodeArgu = g.Code,
NameArgu = g.Name,
PkOrg = AppContext.Session.OrganizationId,
PkArgu = g.PkParamtemp,
Arguval = g.ValDef,
NoteArgu = g.DescParam
});
}
this.gridControl1.DataSource = null;
this.WList = null;
return;
先根据列表对应的实体类,建立list集合,
用foreach遍历新增,将集合里全部的值,所有新增,根据集合里的值,对应赋值给,两一个列表的相应名称。
this.gridControl1.DataSource = null;将以前的列表为空。
完成移动,右侧同理
三、删除、
①将DataSource置为null,再保存,
②删除表中的信息,在次查询,后面会讲
③单行删除,(删除所选中行)
int rowindex = gridView2.FocusedRowHandle;
gridView2.DeleteRow(rowindex);
欢迎补充
四、修改
List<ArguVo> arguList = gridView1.DataSource as List<ArguVo>;
foreach (var a in arguList)
{
pkPcArgu = a.PkPcargu;
}
if (ServiceFactory.CreateService<IDeptParameterService>().UpdateList(arguList, pkPcArgu).Success)
{
MessageBoxUtils.Hint("保存成功!");
}
首先获取到当前列表,遍历当前列表,这里是等到了列表的主键,根据主键修改,java代码,执行修改的sql语句,便可实现。
在这里要讲一下,个人需求,但愿会对你们有所帮助,

右侧列表不可编辑,点击修改,参数值和停用可编辑,

选中参数值,查看属性,optionsColumn里面,allowedit设置为true,readonly为false,这是可编辑状态
参数说明,参数名称的属性,由于这里是不可编辑的,均设置为allowedit为false,readonly为true,不可编辑
在修改按钮的点击事件下,
setBtnStatus(true);//设置按钮状态
并写setBtnStatus方法,方法以下将boolean值以参数的形式传递进去,
/// <summary>
/// 设置按钮状态
/// </summary>
/// <param name="editable"></param>
public void setBtnStatus(bool editable)
{
gridView1.OptionsBehavior.Editable = editable;
}
便可,不要忘了将其余按钮下的状态,置位false;可根据实际状况改变。
至此,增删改查已完成。往后或有补充。
在讲一下树状图,treeList
在vs中的工具栏里,有treelist工具,经过查询的方法,将列表的数据,以树的形式展示出来。也页面设计器中,右键选中

run Designer

fieldName为你想展现出来的实体类中的哪个字段,这里是由于要展现两个字段,在实体类中加
public string TreeText
{
get
{
return "[" + CodeDept + "]" + NameDept;
}
}
CodeDept 和 NameDept;为你实体类中自己的值。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2017年12月28日
按回车页面上输入框跳转问题

若是这些输入框,在一个panel下,是能够自动正常跳转的,会按照顺序跳转,可是若是想让他按回车以后跳转到某一个输入框的话,
在设计器页面下,点击视图,里面有一个tab建顺序按钮

点击以后,

上图蓝色的为编号,x.y.z。
xy同样,主要看z
鼠标点击一次蓝色的小方块,蓝色的小方块为初始时,在此点击+1,
比方说A输入框的蓝色的小方块为7.1.15,想让他跳转到右侧的B输入框,则把右侧的输入框设置为7.1.16便可,其余的同理,系统会自动按照顺序一步一步跳转过去。
记得修改完以后,要将tab键顺序关掉,能够按esc,保存,生成便可。
并将enterMoveNextControl属性设置为true(通常默认为true)

顺带说一下,keyPress事件点击

private void cboPosision_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
meComment.Focus();
}
}
双击keypress事件,cboPosision_KeyPress获取该事件的输入框,
meComment.Focus();获取焦点的输入框,
meComment为输入框的名字。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------2017年12月28日
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------2018年01月06日
C#里按钮的快捷键
先说一下思路吧,有两种思路,一种是注册事件,另外一种是在属性里添加,
此次先讲一下在属性里添加的方式,后续会整理注册事件的方式
首先,先写一个公共类,
类名HotKeysManager(可随我的喜爱)
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Windows.Forms;
6
7 using Zebone.His.Controls;
8
9 namespace Zebone.His.Utils
10 {
11 /// <summary>
12 /// 快捷键管理
13 /// </summary>
14 public class HotkeysManager
15 {
16 private List<HotkeysInfo> hotkeysItems = new List<HotkeysInfo>();
17
18 /// <summary>
19 /// 清空全部的快捷键
20 /// </summary>
21 public void Clear()
22 {
23 hotkeysItems.Clear();
24 }
25
26 /// <summary>
27 /// 触发指定快捷键对应的操做,指定的快捷键有对应操做时,返回true,不然返回false
28 /// </summary>
29 /// <param name="keys">快捷键键位</param>
30 /// <returns></returns>
31 public bool Handle(Keys keys, ref bool suppressKeyPress)
32 {
33 foreach (var item in hotkeysItems)
34 {
35 if (item.Keys == keys)
36 {
37 item.Action();
38 suppressKeyPress = item.SuppressKeyPress;
39
40 return true;
41 }
42 }
43
44 return false;
45 }
46
47 /// <summary>
48 /// 注册快捷键
49 /// </summary>
50 /// <param name="hotkeysRegistration">注册快捷键接口</param>
51 /// <returns></returns>
52 public HotkeysManager Register(IHotkeysRegistration hotkeysRegistration)
53 {
54 if (hotkeysRegistration != null) hotkeysRegistration.RegisterHotkeys(this);
55
56 return this;
57 }
58
59 /// <summary>
60 /// 注册快捷键
61 /// </summary>
62 /// <param name="keys">快捷键键位</param>
63 /// <param name="description">快捷键说明</param>
64 /// <param name="action">快捷键对应操做</param>
65 public HotkeysManager Register(Keys keys, string description, Action action)
66 {
67 return Register(keys, description, false, action);
68 }
69
70 /// <summary>
71 /// 注册快捷键
72 /// </summary>
73 /// <param name="keys">快捷键键位</param>
74 /// <param name="description">快捷键说明</param>
75 /// <param name="suppressKeyPress">执行快捷键后,是否取消按键输入</param>
76 /// <param name="action">快捷键对应操做</param>
77 public HotkeysManager Register(Keys keys, string description, bool suppressKeyPress, Action action)
78 {
79 hotkeysItems.Insert(0, new HotkeysInfo()
80 {
81 Keys = keys,
82 Action = action,
83 SuppressKeyPress = suppressKeyPress,
84 Description = description
85 });
86
87 return this;
88 }
89
90 /// <summary>
91 /// 获取当前已经注册的快捷键数量
92 /// </summary>
93 internal int Count
94 {
95 get { return hotkeysItems.Count; }
96 }
97
98 /// <summary>
99 /// 从控件中发现并注册快捷键
100 /// </summary>
101 /// <param name="control"></param>
102 /// <returns></returns>
103 internal HotkeysManager Register(Control control)
104 {
105 //查找并注册按钮快捷键
106 var button = control as IButtonControl;
107 var supportHotkeys = control as ISupportHotkeys;
108 if (button != null && supportHotkeys != null && supportHotkeys.Hotkeys != Keys.None)
109 {
110 Register(supportHotkeys.Hotkeys, control.Text, button.PerformClick);
111 }
112
113 if (control is IHotkeysRegistration)
114 {
115 Register(control as IHotkeysRegistration);
116 }
117
118 //从子控件中查找
119 foreach (var c in control.Controls)
120 {
121 if (c is Control) Register(c as Control);
122 }
123
124 return this;
125 }
126
127 private class HotkeysInfo
128 {
129 public Keys Keys { get; set; }
130
131 public Action Action { get; set; }
132
133 public bool SuppressKeyPress { get; set; }
134
135 public string Description { get; set; }
136 }
137 }
138 }

代码里有相应注释,后期会在次详细处理
在写一个公共的类,引用这个类的方法,我这里写的是BaseForm(名称可随我的喜爱)
using Zebone.His.Utils;
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (!this.DesignMode)
{
var suppressKeyPress = false;
if (hotkeysManager.Handle(e.KeyData, ref suppressKeyPress))
{
e.SuppressKeyPress = suppressKeyPress;
}
}
}
上面要用using的方式引用以前的utils
而后在你要添加的页面引用baseForm
public partial class InternEmpEdit : BaseForm
而后点击toolbar按钮----属性 (这里以F2为例)

以下图


保存生成,便可。
本期先整理到这,若有疑问,尽情留言!
您的质疑,使咱们共同进步。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------2018年01月06日
---------------------------------------------------------------------------------------------------------------------------------------------------------------------2018年01月08日
C#上传图片

图片上传,首先在页面上定义一个PictureEdit的控件,

再加一个buttencontrol

再添加一个工具控件,OpenFileDialog(在工具箱中能够找到,名字自拟,这里气的名字为ofdPhoto)
接下来开始写代码,
①首先要建立对应的实体类,数据库里存储的类型为image
对应的实体类的类型为
/// <summary>
/// 获取或设置照片
/// </summary>
public byte[] Photo { get; set; }
②要适应格式,
private const string FILEFILTER = "图片|*.jpg;*.png;*.gif;*.jpeg;*.bmp|全部文件|*.*"; 如图

③赋值
public void SetControlsValue(InternEmpVo setValue )
{
isBinding = true;
dcEmpIntern.SetValue(setValue);
this.pePhoto.EditValue = setValue.Photo;
isBinding = false;
}
④上传按钮的点击事件
private void buttonControl1_Click(object sender, EventArgs e)
{
ofdPhoto.ShowDialog();
}
⑤第五步,最关键的一步
private void ofdPhoto_FileOk(object sender, CancelEventArgs e)
{
using (FileStream fs = new FileStream(ofdPhoto.FileName, FileMode.Open))
{
long size = fs.Length;
setInternEmp.Photo = new byte[size];
//将文件读到byte数组中
fs.Read(setInternEmp.Photo, 0, setInternEmp.Photo.Length);
fs.Close();
this.pePhoto.EditValue = setInternEmp.Photo;
}
}
pePhoto为pictureEdit的名称
上传成功,保存进数据库便可。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------2018年01月08日
---------------------------------------------------------------------------------------------------------------------------------------------------------------------2018年01月11日
String.Format("{0:N1}", a) 保留小数点后一位
String.Format("{0:N2}", a) 保留小数点后两位
String.Format("{0:N3}", a) 保留小数点后三位
C#保留小数位N位四舍五入
- double s=0.55555;
- result=s.ToString("#0.00");
C#保留小数位N位四舍五入
- double dbdata = 0.55555;
- string str1 = dbdata.ToString("f2");
---------------------------------------------------------------------------------------------------------------------------------------------------------------------2018年01月11日
----------------------------------------------------------------------------------------------------------------------------------------------------------------------2018年04月20日
C# 怎么判断输入的字符串是整数(输入的不必定是字符串类型,能够是object类型)
/// <summary>
/// 判断是不是整数 是则返回true; 不是则返回false
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static bool isInIsInteger(string s)
{
long num;
bool falg = long.TryParse(s, out num); //此处为核心代码
if (falg == true)
{
return true;
}
else
{
return false;
}
}
我这里传的参数是string 类型,固然也能够传一个obj类型 不过在 long.TryParse(s, out num); 中的s能够加上.toString();
在须要的方法中调用便可
(附赠按钮的点击方法)
private void btnSaveSupply_Click_1(object sender, EventArgs e)
{
if (!dcSupply.Validate()) return;
dcSupply.GetValue(editParam.supply);
editParam.itemList = gvItem.DataSource as List<SupplyItem>;
for (int i = 0; i < editParam.itemList.Count; i++)
{
if (editParam.itemList[i].Quan <= 0 || editParam.itemList[i].Quan == null )
{
MessageBoxUtils.Hint("数量为必填项,且必须大于0的整数!",HintMessageBoxIcon.Error);
return;
}
string aa = editParam.itemList[i].Quan.ToString();
var bb = isInIsInteger(aa);
if (bb == false)
{
MessageBoxUtils.Hint("数量必须是整数!", HintMessageBoxIcon.Error);
return;
}
}
var result = ServiceFactory.CreateService<IOrderUsageService>().SaveSupply(editParam);
if (result.Success)
{
MessageBoxUtils.Hint("保存成功!");
LoadTree();
SetButtonStatus(false);
}
}
红色字体为调用该方法处
----------------------------------------------------------------------------------------------------------------------------------------------------------2018-06-05
C#列表中判断输入的值是否为数字
两种思路。
可是首先要写一个方法,方法分为两种:
1
1 /// <summary>
2 /// 判断输入是否数字
3 /// </summary>
4 /// <param name="num">要判断的字符串</param>
5 /// <returns></returns>
6 public static bool VldInt(string num)
7 {
8 #region
9 int ResultNum;
10 return int.TryParse(num, out ResultNum);
11 #endregion
}
2
1 /// <summary>
2 /// 判断输入的是否为数字
3 /// </summary>
4 /// <param name="num"></param>
5 /// <returns></returns>
6 public static bool isNum(string num)
7 {
8 #region
9 try
10 {
11 Convert.ToInt32(num);
12 return true;
13 }
14 catch
15 {
16 return false;
17 }
18 #endregion
19 }
一,能够在保存时作判断,
点击按钮,获取须要的全部列表,循环遍历调用方法,若是不符合条件,跳出循环,不细讲了
2、EditValueChanging事件,实时判断,

1 private void riteQuan_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
2 {
3 var row = gvApply.GetFocusedRow() as BdOrdSetAndDtVO;
4 var aa = isNum(e.NewValue.ToString());
5 if (!aa) e.NewValue = "1";
6 if (e.NewValue.ToString() != "" || e.NewValue != null)
7 {
8 row.Quan = Convert.ToDecimal(e.NewValue);
9 }
10 if (row != null && row.Quan != 0)
11 {
12 var i = e.NewValue;
13 row.Amount = row.PriceCg * row.Quan;
14 }
15 else
16 gvApply.DeleteRow(gvApply.FocusedRowHandle);
17 gvApply.RefreshData();
18 }
19 #endregion
其中第四行调用该方法,第5行判断,若是不知足条件,赋默认值为1
-------------------------------------------------------------------------------------------------------------------------------------------------------2018-06-05