zoukankan      html  css  js  c++  java
  • C#实例应用总结

    C#实例应用总结(一)

    本人没有系统学习过,C#,只是在工作中积累了一些,为了方便以后开发中使用,在此做一下总结,如有不对的地方,欢迎各位观众多多批评与指正!

    您的意见,才能使大家更好的进步!望不吝指教!

    概念就不说了,有兴趣的话,可以留言,以后再加上!

    工具用的是VS2013,后台用的java

    一、gridView的增删改查,

    1、查询

    根据sql查询,

    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方法名。

    2、新增

    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;将之前的列表为空。

    完成移动,右侧同理

    3、删除、

    ①将DataSource置为null,再保存,

    ②删除表中的信息,在次查询,后面会讲

    ③单行删除,(删除所选中行)

    int rowindex = gridView2.FocusedRowHandle;
    gridView2.DeleteRow(rowindex);

    欢迎补充

    4、修改

    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日

    C#保留小数点后几位

    String.Format("{0:N1}", a) 保留小数点后一位

    String.Format("{0:N2}", a) 保留小数点后两位

    String.Format("{0:N3}", a) 保留小数点后三位

    C#保留小数位N位四舍五入

    1. double s=0.55555;   
    2. result=s.ToString("#0.00");//点后面几个0就保留几位 

    C#保留小数位N位四舍五入

    1. double dbdata = 0.55555;   
    2. string str1 = dbdata.ToString("f2");//fN 保留N位,四舍五入

     ---------------------------------------------------------------------------------------------------------------------------------------------------------------------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         }    

    一,可以在保存时做判断,

    点击按钮,获取需要的所有列表,循环遍历调用方法,如果不符合条件,跳出循环,不细讲了

    二、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

  • 相关阅读:
    听说在新的一年里你的证书过期了
    css 清楚浮动的8种方式
    Majority Element:主元素
    HDOJ 5296 Annoying problem LCA+数据结构
    hdu 5318 The Goddess Of The Moon 矩阵高速幂
    友盟页面统计
    用html语言写一个功课表
    苹果新的编程语言 Swift 语言进阶(二)--基本数据类型
    Atitit.mssql 数据库表记录数and 表体积大小统计
    jeecms 代码生成 Tools
  • 原文地址:https://www.cnblogs.com/yanran444/p/8093110.html
Copyright © 2011-2022 走看看