zoukankan      html  css  js  c++  java
  • 【NET】Winform用户控件的初步封装之编辑控件

    编辑控件

      1 public abstract partial class TEditorBase <TEntity, TRepository, TSqlStrConstruct> : UserControl
      2         where TEntity:Yom.Extend.Entity.EntityBase
      3         where TRepository : Yom.Extend.Repository.RepositoryBaseRepository<TEntity, TSqlStrConstruct>
      4         where TSqlStrConstruct : Huawei.Data.SqlStrConstruct
      5     {
      6         protected TRepository repository = System.Activator.CreateInstance<TRepository>();
      7         public TEditorBase()
      8         {
      9             InitializeComponent();
     10             
     11             this.gpxTitle.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
     12                         | System.Windows.Forms.AnchorStyles.Left)
     13                         | System.Windows.Forms.AnchorStyles.Right)));
     14         }
     15         string key;
     16         public string Key
     17         {
     18             get {
     19                 return key;
     20             }
     21             set {
     22                 if (string.IsNullOrEmpty(value)) {
     23                     return;
     24                 }
     25                 key = value;
     26                 Entity = this.repository.FindBy(value) as Yom.Extend.Entity.EntityBase;
     27             }
     28         }
     29         protected abstract Action<EntityDataBindEventArgs> AfterMapDataToEntityAction
     30         {
     31             get;
     32         }
     33         protected abstract Action<EntityDataBindEventArgs> AfterMapDataToControlAction
     34         {
     35             get;
     36         }
     37         protected virtual Yom.Extend.Entity.EntityBase Entity
     38         {
     39             get {
     40                 TEntity entity = System.Activator.CreateInstance<TEntity>();
     41                 entity.PropertyValueSet(this.repository.GetEntityKeyName(), this.Key);
     42                 DataDetailGetFromControlChildren.MapDataToEntity(entity, this, AfterMapDataToEntityAction);
     43                 return entity;
     44             }
     45             set {
     46                 if (value == null)
     47                 {
     48                     return;
     49                 }
     50                 
     51                 DataDetailGetFromControlChildren.MapDataToControl(value, this, this.AfterMapDataToControlAction);
     52             }
     53         }
     54 
     55         protected virtual string Title
     56         {
     57             get {
     58                 return string.Empty;
     59             }
     60         }
     61         protected virtual bool IsValid(out string msg)
     62         {
     63             msg = string.Empty;
     64             return true;
     65         }
     66         protected virtual void SaveCallBack()
     67         {
     68             string msg = string.Empty;
     69             if (!IsValid(out msg))
     70             {
     71                 MessageBox.Show(msg);
     72                 return;
     73             }
     74             try
     75             {
     76                 if (string.IsNullOrEmpty(this.Key))
     77                 {
     78                     do
     79                     {
     80                         this.key = Guid.NewGuid().ToString();
     81                     } while (this.repository.Exists(this.key));
     82                     this.repository.Add(this.Entity);
     83                 }
     84                 else
     85                 {
     86                     this.repository.Update(this.Entity);
     87                 }
     88                 MessageBox.Show("保存成功!");
     89                 this.Hide();
     90                 this.Parent.Controls.Add(Lister);
     91                 this.Parent.Controls.Remove(this);
     92                 this.Dispose();
     93             }
     94             catch (Exception ex)
     95             {
     96                 MessageBox.Show(string.Format("保存失败:
    {0}", ex.Message));
     97             }
     98         }
     99 
    100         protected virtual void CancelCallBack()
    101         {
    102             //this.Hide();
    103             //this.Parent.Controls.Add(GetListControl());
    104             //this.Parent.Controls.Remove(this);
    105             //this.Dispose();
    106             //this = null;
    107             if (this.Parent.Controls.Count <= 1)
    108             {
    109                 this.Parent.Controls.Add(this.Lister);
    110                 this.Parent.Controls.RemoveAt(0);
    111             }
    112             else
    113             {
    114                 this.Parent.Controls[0].Show();
    115                 this.Parent.Controls.RemoveAt(1);
    116             }
    117         }
    118 
    119         private void bSave_Click(object sender, EventArgs e)
    120         {
    121             SaveCallBack();
    122         }
    123 
    124         private void TEditorBase_Load(object sender, EventArgs e)
    125         {
    126             this.gpxTitle.Text = this.Title;
    127         }
    128         public abstract TListPager<TEntity, TRepository, TSqlStrConstruct> Lister
    129         {
    130             get;
    131         }
    132 
    133         private void bCancel_Click(object sender, EventArgs e)
    134         {
    135             CancelCallBack();
    136         }
    137     }

    属性赋值:

     1 public class EntityDataBindEventArgs : EventArgs
     2     {
     3 
     4         public Yom.Extend.Entity.EntityBase CurrentEntity
     5         {
     6             get;
     7             set;
     8         }
     9         public System.Reflection.PropertyInfo PropertyInfo
    10         {
    11             get;
    12             set;
    13         }
    14         public System.Windows.Forms.Control BindControl
    15         {
    16             get;
    17             set;
    18         }
    19     }
    20     public class DataDetailGetFromControlChildren
    21     {
    22         public static void MapDataToEntity(Yom.Extend.Entity.EntityBase entity, System.Windows.Forms.Control parent, Action<EntityDataBindEventArgs> afterDataGet)
    23         {
    24 
    25             System.Reflection.PropertyInfo[] pis = entity.GetType().GetProperties();
    26             if (pis != null && pis.Length > 0) {
    27                 System.Windows.Forms.Control c;
    28                 foreach (System.Reflection.PropertyInfo pi in pis)
    29                 {
    30                     c = null;
    31                     try
    32                     {
    33                         c = parent.Controls.Find(pi.Name, true)[0];
    34                     }
    35                     catch {
    36                         continue;
    37                     }
    38                     if (c != null)
    39                     {
    40                         entity.PropertyValueSet(pi.Name, c.Text);
    41                         if (afterDataGet != null)
    42                         {
    43                             afterDataGet(new EntityDataBindEventArgs() { CurrentEntity = entity, PropertyInfo = pi, BindControl = c });
    44                         }
    45                     }
    46                 }
    47             }
    48         }
    49         public static void MapDataToControl(Yom.Extend.Entity.EntityBase entity, System.Windows.Forms.Control parent, Action<EntityDataBindEventArgs> afterDataSet)
    50         {
    51             System.Reflection.PropertyInfo[] pis = entity.GetType().GetProperties();
    52             if (pis != null && pis.Length > 0)
    53             {
    54                 System.Windows.Forms.Control c;
    55                 foreach (System.Reflection.PropertyInfo pi in pis)
    56                 {
    57                     c = null;
    58                     try
    59                     {
    60                         c = parent.Controls.Find(pi.Name, true)[0];
    61                     }
    62                     catch
    63                     {
    64                         continue;
    65                     }
    66                     if (c != null)
    67                     {
    68                         if ((c is System.Windows.Forms.ComboBox) && !(c as System.Windows.Forms.ComboBox).Items.Contains(pi.GetValue(entity, null))) {
    69                             continue;
    70                         }
    71                         c.Text = pi.GetValue(entity, null).ToString();
    72                         if (afterDataSet != null)
    73                         {
    74                             afterDataSet(new EntityDataBindEventArgs() { CurrentEntity = entity, PropertyInfo = pi,BindControl=c });
    75                         }
    76                     }
    77                 }
    78             }
    79         }
    80     }

    此封装要结合之前发的那篇分页控件的文章

    逻辑处理不是最终形态 仅仅是临时解决方案

  • 相关阅读:
    [WPF VTK]三维图形开发基础(一)
    WP开发(一)
    [WPF VTK]三维图形开发基础(四)

    WIN8 下IE突然无法打开(管理员权限可打开)
    [WPF VTK]三维图形开发基础(三)
    堆排序、快排的坑
    双向链表之插入
    [WPF VTK]三维图形开发基础(二)
    [转载]Android界面设计学习日志(一)
  • 原文地址:https://www.cnblogs.com/yomho/p/3219912.html
Copyright © 2011-2022 走看看