zoukankan      html  css  js  c++  java
  • TaskMgr C#技术拾遗

    1. DataGridView和ContextMenuStrip的绑定是发生在DataGridView的CellMouseClick事件,在事件中指定右键菜单弹出;

    2. DataGridView的列名称(columnName)的指定是(name)属性,如果没有手工指定,那么将会默认为DataPropertyName + 列类型(比如idTextBoxColumn),所以需要手工指定一下:

    image

    或者是在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中添加内容:

    imageimage

    添加了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来进行获取。

    image

     

    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,对于空值的日期处理有问题,后来填充上了真实日期后完美解决此问题;

  • 相关阅读:
    Sublime Text前端开发环境配置
    CSS盒模型
    Angular-如何在Angular2中使用jQuery及其插件
    六:Angular 指令 (Directives)
    五:Angular 数据绑定 (Data Binding)
    四:Angular 元数据 (Metadata)
    三:Angular 模板 (Templates)
    二:Angular 组件 (Components)
    一:Angular 模块 (Modules)
    js获取浏览器内核
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/3661091.html
Copyright © 2011-2022 走看看