TaskMgr C#技术拾遗
1. DataGridView和ContextMenuStrip的绑定是发生在DataGridView的CellMouseClick事件,在事件中指定右键菜单弹出;
2. DataGridView的列名称(columnName)的指定是(name)属性,如果没有手工指定,那么将会默认为DataPropertyName + 列类型(比如idTextBoxColumn),所以需要手工指定一下:
或者是在load方法中同步一下:
- private void frmTaskList_Load(object sender, EventArgs e)
- {
- …
- foreach (DataGridViewColumn item in this.dgTaskList.Columns)
- {
- item.Name = item.DataPropertyName;
- }
- …
- }
3. 父类事件是不能直接让子类调用(但是可以通过实例化之后的子类来为父类的事件赋值),于是需要让父类通过方法封装一下于是有了:
- public class BaseEditForm : Form
- {
- …
- public event RefreshList RefreshParent;
- public void OnRefreshParent()
- {
- if (this.RefreshParent != null)
- {
- this.RefreshParent();
- }
- }
- …
- }
public partial class frmEditProject : BaseEditForm { … private void btnOK_Click(object sender, EventArgs e) { … base.OnRefreshParent(); this.Close(); } …}
4. Combox的绑定,如果绑定的是List对象,需要先制定displayMember和ValueMember,然后再指定DataSource,否则将会报错:Cannot bind to the new display member.
- this.cbProj.DisplayMember = "ProjectName";
- this.cbProj.ValueMember = "Id";
- this.cbProj.DataSource = ProjectService.GetProjects();
- this.cbProj.SelectedValue = task.ProjId;
另外,如果是要根据“value”选中下拉框某项,只需要设置selectedValue即可。
5. 循环删除
方式一:将删除内容放置到一个新的删除列表中,然后遍历删除列表中的项,从真正的列表中删除该项(避免直接遍历真正list删除导致缺位情况);
方式二:倒叙删除
6. LinqToSql的Join
切记,linqtosql的的Join,左侧一定是关联表,右侧才是本次Join的表,如下:
- var query = from ws in context.workflowsequeuece
- join w in context.workflow on ws.WFID equals w.Id
- join t in context.task on ws.TaskId equals t.Id
- join e in context.employee on ws.EmpID equals e.Id
- where ws.TaskId == m.Id
- select …
6.Linq返回实体类
- public static List<BizEmployee> GetMemebersByProjId(int pProjId)
- {
- Model1Container container = DbUtil.GetDbContainer();
- var query = from t in container.project_employee where t.ProjId == pProjId
- select new BizEmployee(t.EmpId.Value, t.EmpName);
- return query.ToList<BizEmployee>();
- }
返回异常:Only parameterless constructors and initializers are supported in LINQ to Entities.
修改为:
- public static List<BizEmployee> GetMemebersByProjId(int pProjId)
- {
- Model1Container container = DbUtil.GetDbContainer();
- var query = from t in container.project_employee
- where t.ProjId == pProjId
- select new BizEmployee { Id = t.EmpId.Value, EmpName = t.EmpName };
- return query.ToList<BizEmployee>();
- }
问题解决。
7. DataGridView性能情况
后来发现是因为DataSouce(List<T>)中绑定了一个Workflow对象,去掉这个对象(不赋值)即可轻松绑定。
8. Settings
考虑如何实现Winform的“记住用户名密码”,后来发现使用Settings可以实现:
直接在Settings.setting中添加内容:
添加了Settings内容后,直接就会在Settings.Default中体现出来;
赋值方式(注意最后要Save):
- Settings.Default.Mail = mail;
- Settings.Default.Password = pwd;
- Settings.Default.Save();
取值方式:
- this.txtPwd.Text = Settings.Default.Password;
- this.txtUserName.Text = Settings.Default.Mail;
评价:简单易行,比之向xml以及ini文件写还要去打开文件、关闭文件,要方便得多。
9. MDI父窗体的关闭
如果直接关闭MDI父窗体,将会导致一个问题,主线程没有关闭,这个时候需要:
- private void frmParent_FormClosing(object sender, FormClosingEventArgs e)
- {
- Application.Exit();
- }
10.Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.
碰到了两次这种情况:
1.调用共通方法,传入的entity所定义的类型错了SetEntityType()发放有误;
2.是因为表结构主键没有设置自增长,Id也没有赋值导致。
11. DataGridView的ContextStrip属性和右键CellMouseClick失效
1. 如果为DataGridview指定了ContextMenuStrip属性,那么右键的话,DataGridView将不会再走自定义的CellMouseClick事件方法体,而是走内置的展示ContextStript事件;所以如果需要在右键事件中做额外处理(比如获取当前指定的行),那么就不要为DataGridView指定ContextMenuStrip属性了。
2. DataGridView的PropertyName和(Design)Name默认是不一致的,而且通过列名索引使用的是(Design)Name,所以需要对其进行手工设置,或者存取的时候按照(Design)Name来进行获取。
EntityFramework
1. Requested value 'Geometry' was not found
几乎一个晚上都在调整这个问题,后来发现是因为Updater工程,被我重定向到了UI/bin/Debug之后,产生的副产物,后来从定向回到了自己的bin目录下,问题完美解决。
MySql
Unable to convert MySQL date/time value to System.DateTime
后来发现是因为Mysql的datetime字段值为0-00000-0,对于空值的日期处理有问题,后来填充上了真实日期后完美解决此问题;
TaskMgr C#技术拾遗的更多相关文章
- 基于gin的golang web开发:Gin技术拾遗
本文是对前几篇文章的一些补充,主要包含两部分:单元测试和实际项目中使用路由的小问题. 拾遗1:单元测试 Golang单元测试要求代码文件以_test结尾,单元测试方法以Test开头,参数为*testi ...
- Hive技术拾遗
1. SELECT语句可以使用正则表达式做列选择,下面的语句查询除了ds和h 之外的所有列:SELECT `(ds|hr)?+.+` FROM sales 2. LEFT SEMI JOIN的限制是, ...
- 第11章 拾遗5:IPv6和IPv4共存技术(3)_NAT-PT技术【全书完】
6.4 NAT-PT (1)NAT-PT和NAT的差别 ①NAT-PT(附带协议转换的网络地址转换)技术秉承NAT技术的思想,但在原理方面大有不同. ②NAT-PT和NAT本质的区别在于应用场合的不同 ...
- 第11章 拾遗5:IPv6和IPv4共存技术(2)_ISATAP隧道技术
6.3 ISATAP隧道技术 (1)基本概念 ①在一个IPv4网络中主机与路由器之间创建一条ISATAP隧道,以便让该主机可以访问IPv6网络中的资源. ②条件:IPv4中的PC主机需要支持IPv4和 ...
- 第11章 拾遗5:IPv6和IPv4共存技术(1)_双栈技术和6to4隧道技术
6. IPv6和IPv4共存技术 6.1 双栈技术 (1)双协议主机的协议结构 (2)双协议栈示意图 ①双协议主机在通信时首先通过支持双协议的DNS服务器查询与目的主机名对应的IP地址. ②再根据指定 ...
- ES6 class 技术点拾遗
语法 方法不需要加function,方法之间不需要加分号 class Point { constructor(x, y) { this.x = x; this.y = y; } toString() ...
- 基础拾遗------webservice详解
基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...
- ABAP开发顾问必备:SAP ABAP开发技术总结
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- C#多线程技术总结(异步)
我这里针对现有的C#多线程技术进行一个汇总,一是复习,二是方便索引,文章部份知识点来源于网络,非本人原创. 一.并行(异步): 1.System.Threading.Tasks命名空间下的(TPL): ...
随机推荐
- iOS实用技能扩展-静态库的制作与简单使用
前言:此文是关于静态库的概念描述,如何制作及简单调试使用,不同版本的说明与场景使用. 1.关于库的简介: 库可以分为2种类型 开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetw ...
- XMind十大最有用的功能
XMind十大最有用的功能 XMind是一款顶级商业品质的思维导图软件和头脑风暴软件,在企业和教育领域都有很广泛的应用,XMind功能全面,易上手,在此小编给大家整理出了XMind十大最有用的功能以供 ...
- C#通过FTP账号上传、修改、删除文件 FTPClient
下面类文件中,主要做的工作是:从ftp服务器上下载文件把本地文件替换.添加.或删除功能,在替换本地文件时会先备份一下本地的文件,若整个操作都完成了就会发出commit命令,表示全部替换成功.若中间操作 ...
- 硝烟中的Scrum和XP-我们如何实施Scrum 15)多团队 Part 2/2 16)地理分散 17)检查列表 18)其他
引入"团队领导"角色 假设有3个团队开发同一个产品 红色的P是PO, 黑色的S是SM, 蓝色是其他团队成员; 如何决定哪些人属于哪个团队? 怎么分配成员? 有人觉得让PO来做人员分 ...
- C#调用java接口报“Fault occurred while processing”异常问题
服务在通常项目中总是要用到的C#的webservice.wcf,还有第三方的,比如java服务.一般来说调用都不会有什么问题,因为服务的标准都是一样的.要注意的就是:1.参数个数匹配:2.参数类型和返 ...
- LabVIEW设计模式系列——状态机
标准:1.状态用枚举自定义类型,便于统一管理修改.2.一般地应该有:Initialize,Idle,Stop,Blank状态.3.Initialize进行一些初始化的操作:Idle一种过渡状态,用于和 ...
- Intra-cluster Replication in Apache Kafka--reference
Kafka is a distributed publish-subscribe messaging system. It was originally developed at LinkedIn a ...
- ServletContext对象--三大域对象
Servlet三大域对象的应用 request.session.application(ServletContext) ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器 ...
- [Eclipse]The type XXX cannot be resolved. It is indirectly referenced from required .class files
在Eclipse中遇到The type XXX cannot be resolved. It is indirectly referenced from required .class files错误 ...
- mac下通过docker搭建LEMP环境
在mac下通过docker搭建LEMP环境境 1.安装virtualbox.由于docker是在lxc环境的容器 2.安装boot2docker,用于与docker客户端通讯 > brew up ...