• 【NET】Winform用户控件的初步封装之列表页控件


      1 public abstract partial class TListPager<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         ToolTip toolTip;
      8         TSqlStrConstruct sqlStrConstruct;
      9         public TListPager()
     10         {
     11             InitializeComponent();
     12             if (this.IsContextMenu)
     13             {
     14                 this.lvList.ContextMenuStrip = this.cmsOperation;
     15             }
     16             this.wfpPager.PageSize = 20;
     17             this.wfpPager.PageChanged += new WinFormPager.PageChangeDelegate(
     18                 () =>
     19                 {
     20                     DataBind();
     21                 }
     22             );
     23             this.Dock = System.Windows.Forms.DockStyle.Fill;
     24             this.lvList.Dock = System.Windows.Forms.DockStyle.Top;
     25             this.lvList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
     26                         | System.Windows.Forms.AnchorStyles.Left)
     27                         | System.Windows.Forms.AnchorStyles.Right)));
     28             this.lvList.ItemMouseHover += new ListViewItemMouseHoverEventHandler((object o, ListViewItemMouseHoverEventArgs ea) => {
     29                 if (!string.IsNullOrEmpty(ea.Item.ToolTipText)) {
     30                     if (this.toolTip == null) {
     31                         this.toolTip = new ToolTip();
     32                     }
     33                     this.toolTip.SetToolTip(this.lvList, ea.Item.ToolTipText);
     34                 }
     35             });
     36             this.cSearcher = this.CSearcher;
     37             if (this.cSearcher == null)
     38             {
     39                 this.pSearchContainer.Visible = false;
     40                 this.lvList.Location = new Point(0, 0);
     41                 //this.lvList.Height += this.pSearchContainer.Height;
     42             }
     43             else {
     44                 if (this.cSearcher.SearchAction == null)
     45                 {
     46                     this.cSearcher.SearchAction = (SearchArgs sa) =>
     47                     {
     48                         if (sa != null)
     49                         {
     50                             if (sa.Params != null)
     51                             {
     52                                 this.SearchParams = sa.Params.ToArray();
     53                             }
     54                             string whereStr = sa.SearchStr.ToString();
     55                             if (!string.IsNullOrEmpty(whereStr))
     56                             {
     57                                 if (string.IsNullOrEmpty(this.Where))
     58                                 {
     59                                     this.where = sa.SearchStr.ToString();
     60                                 }
     61                                 else
     62                                 {
     63                                     this.where = string.Format("{0} AND {1}", this.Where, sa.SearchStr.ToString());
     64                                 }
     65                             }
     66 
     67                         }
     68                         TListPager_Load(null, null);
     69                     };
     70                 }
     71                 this.cSearcher.Dock = DockStyle.Fill;
     72                 this.pSearchContainer.Height = this.cSearcher.Height;
     73                 this.pSearchContainer.Controls.Add(this.cSearcher);
     74                 this.lvList.Location = new Point(0, this.pSearchContainer.Height);
     75                 this.lvList.Height = this.Height - this.cSearcher.Height - this.wfpPager.Height;
     76             }
     77             editor = this.Editor;
     78             Init();
     79         }
     80         protected virtual void Init(){
     81             
     82         }
     83         protected TEditorBase<TEntity, TRepository, TSqlStrConstruct> editor;
     84         protected abstract TEditorBase<TEntity, TRepository, TSqlStrConstruct> Editor
     85         {
     86             get;
     87         }
     88          protected void TListPager_Load(object sender, EventArgs e)
     89         {
     90             this.wfpPager.CurrentPage = 1;
     91             DataBind();
     92         }
     93         protected abstract string Order
     94         {
     95             get;
     96             
     97         }
     98         protected bool IsContextMenu {
     99             get {
    100                 return true;
    101             }
    102         }
    103         protected string where;
    104         protected abstract string Where
    105         {
    106             get;
    107         }
    108         protected virtual System.Data.IDataParameter[] SearchParams
    109         {
    110             get;
    111             set;
    112         }
    113         protected abstract ColumnHeader[] Columns
    114         {
    115             get;
    116         }
    117         protected Type EntityType {
    118             get {
    119                 return typeof(TEntity);
    120             }
    121         }
    122         protected virtual bool EnabledPage
    123         {
    124             get {
    125                 return true;
    126             }
    127         }
    128         public virtual void DataBind(int pageIndex) {
    129             this.wfpPager.CurrentPage = pageIndex;
    130             DataBind();
    131         }
    132         private void DataBind()
    133         {
    134             int count = 0;
    135             TEntity[] tes;
    136             if (string.IsNullOrEmpty(this.where)) {
    137                 this.where = this.Where;
    138             }
    139             if (EnabledPage)
    140             {
    141                 tes = this.repository.FindAll(this.wfpPager.CurrentPage, this.wfpPager.PageSize, this.where, string.IsNullOrEmpty(this.Order)?string.Empty:this.Order, SearchParams, out count) as TEntity[];
    142             }
    143             else {
    144                 tes = this.repository.FindAll(where, Order, this.SearchParams) as TEntity[];
    145             }
    146             this.lvList.Columns.Clear();
    147             this.lvList.Items.Clear();
    148             this.lvList.Columns.Add(new ColumnHeader(){ Text="序号",Width=40 });
    149 
    150             this.lvList.Columns.AddRange(this.Columns);
    151             this.lvList.ShowItemToolTips = true;
    152             int baseNo = this.wfpPager.PageSize * (this.wfpPager.CurrentPage - 1);
    153             string[] itemArr ;
    154             object propertyValue;
    155             int columnIndexRecord;
    156             ListViewItem toAdditem;
    157             foreach (TEntity te in tes)
    158             {
    159                 itemArr = new string[this.Columns.Length + 1];
    160                 itemArr[0] = (++baseNo).ToString();
    161                 columnIndexRecord = 0;
    162                 foreach (ColumnHeader ch in this.Columns) {
    163                     columnIndexRecord++;
    164                     if (string.IsNullOrEmpty(ch.Name)) {
    165                         continue;
    166                     }
    167                     try
    168                     {
    169                         propertyValue = EntityType.GetProperty(ch.Name).GetValue(te, null);
    170                     }
    171                     catch {
    172                         continue;
    173                     }
    174                     if (propertyValue is DateTime)
    175                     {
    176                         itemArr[columnIndexRecord] = DateTimeAction(ch.Name, (DateTime)propertyValue);
    177                     }
    178                     else
    179                     {
    180                         itemArr[columnIndexRecord] = propertyValue.ToString();
    181                     }
    182 
    183                     
    184                 }
    185                 
    186                 toAdditem = new ListViewItem(itemArr) { Name = EntityType.GetProperty(this.repository.GetEntityKeyName()).GetValue(te, null).ToString() };
    187                 if (!string.IsNullOrEmpty(this.ItemTooltipFiledName))
    188                 {
    189                     toAdditem.ToolTipText = EntityType.GetProperty(this.ItemTooltipFiledName).GetValue(te, null).ToString();
    190                 }
    191                 toAdditem.Tag = te;
    192                 ItemBeforeAdd(toAdditem);
    193                 
    194                 this.lvList.Items.Add(toAdditem);
    195                 
    196             }
    197             if (EnabledPage)
    198             {
    199                 this.wfpPager.RecordCount = count;
    200                 if (this.wfpPager.PageTotal.Equals(1) || count <= 0)
    201                 {
    202                     
    203                     this.wfpPager.Visible = false;
    204                     if (this.cSearcher == null)
    205                     {
    206                         this.lvList.Height = this.Height;
    207                     }
    208                     else
    209                     {
    210                         this.lvList.Height = this.Height - this.cSearcher.Height;
    211                     }
    212                 }
    213                 else {
    214                     this.wfpPager.Visible = true;
    215                     if (this.cSearcher == null)
    216                     {
    217                         this.lvList.Height = this.Height - this.wfpPager.Height;
    218                     }
    219                     else
    220                     {
    221                         this.lvList.Height = this.Height - this.cSearcher.Height -this.wfpPager.Height;
    222                     }
    223                 }
    224             }
    225             else {
    226                 this.wfpPager.Visible = false;
    227                 if (this.cSearcher == null)
    228                 {
    229                     this.lvList.Height = this.Height;
    230                 }
    231                 else
    232                 {
    233                     this.lvList.Height = this.Height - this.cSearcher.Height;
    234                 }
    235 
    236             }
    237         }
    238         protected virtual void ItemBeforeAdd(ListViewItem toAdditem)
    239         { 
    240             
    241         }
    242         protected virtual string ItemTooltipFiledName
    243         {
    244             get;
    245             set;
    246         }
    247 
    248         protected virtual string DateTimeAction(string propertyName,DateTime dt) {
    249             try
    250             {
    251                 if (dt.Equals(DateTime.MinValue)) {
    252                     return string.Empty;
    253                 }
    254                 return dt.ToString("yyyy-MM-dd HH:mm");
    255             }
    256             catch {
    257                 try
    258                 {
    259                     return dt.ToString();
    260                 }
    261                 catch
    262                 {
    263                     return string.Empty;
    264                 }
    265                 //return string.Empty;
    266             }
    267         }
    268 
    269         protected virtual void cmsOperation_Opening(object sender, CancelEventArgs e)
    270         {
    271             if (this.editor == null && this.cmsOperation.Items.Count.Equals(4)) {
    272                 this.cmsOperation.Items.RemoveAt(0);
    273                 this.cmsOperation.Items.RemoveAt(0);
    274                 this.cmsOperation.Items.RemoveAt(0);
    275             }
    276             if (this.cmsOperation.Items.Count.Equals(4))
    277             {
    278                 if (this.lvList.SelectedItems.Count <= 0)
    279                 {
    280                     this.cmsOperation.Items[1].Enabled = this.cmsOperation.Items[3].Enabled = false;
    281                 }
    282                 else
    283                 {
    284                     this.cmsOperation.Items[1].Enabled = this.cmsOperation.Items[3].Enabled = true;
    285                 }
    286             }
    287             else {
    288                 if (this.lvList.SelectedItems.Count <= 0)
    289                 {
    290                     this.cmsOperation.Items[0].Enabled = false;
    291                 }
    292                 else
    293                 {
    294                     this.cmsOperation.Items[0].Enabled = true;
    295                 }
    296             }
    297         }
    298         protected virtual bool DeleteValid(out string msg) {
    299             msg = string.Empty;
    300             return true;
    301         }
    302         protected virtual void cmsOperation_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
    303         {
    304             this.cmsOperation.Visible = false;
    305             string key = e.ClickedItem.Tag == null ? e.ClickedItem.Text : e.ClickedItem.Tag.ToString();
    306             switch (key)
    307             {
    308                 case "添加":
    309                     //if (this.cmsOperation.Tag != null)
    310                     //{
    311                     //    (this.cmsOperation.Tag as Button).PerformClick();
    312                     //}
    313                     //else
    314                     //{
    315                     //    (this.Parent.Parent.Controls.Find("Edit", true)[0] as Button).PerformClick();
    316                     //}
    317                     editor = this.Editor;
    318                     if (this.editor == null) {
    319                         return;
    320                     }
    321                    
    322                     this.Hide();
    323                     this.Parent.Controls.Add(this.editor);
    324                     break;
    325                 case "编辑":
    326                     //Button b;;
    327                     //if (this.cmsOperation.Tag != null)
    328                     //{
    329                     //    b = this.cmsOperation.Tag as Button;
    330                     //}
    331                     //else
    332                     //{
    333                     //    b = (this.Parent.Parent.Controls.Find("Edit", true)[0] as Button);
    334                     //}
    335                     //b.Tag = this.lvList.FocusedItem.Name;
    336                     //b.PerformClick();
    337                     editor = this.Editor;
    338                     if (this.Editor == null)
    339                     {
    340                         return;
    341                     }
    342                     
    343                     if (this.lvList.SelectedItems.Count > 1) {
    344                         MessageBox.Show("只能选择一项!");
    345                         return;
    346                     }
    347                     if (this.lvList.SelectedItems.Count < 1)
    348                     {
    349                         MessageBox.Show("至少选择一项!");
    350                         return;
    351                     }
    352                     this.Hide();
    353                     this.Parent.Controls.Add(this.editor);
    354                     this.editor.Key = this.lvList.SelectedItems[0].Name;
    355                     break;
    356                 case "删除":
    357                     try
    358                     {
    359                         if (!Huawei.PortableComputer.Log.LogVar.UserName.Equals("admin"))
    360                         {
    361                             MessageBox.Show("只有超级管理员才有删除记录的权限。");
    362                             return;
    363                         }
    364                     }
    365                     catch { }
    366                     string msg;
    367                     if (!DeleteValid(out msg)) {
    368                         if (!string.IsNullOrEmpty(msg)) {
    369                             MessageBox.Show(msg);
    370                             return;
    371                         }
    372                     }
    373                     if (DialogResult.OK.Equals(MessageBox.Show("确定要删除吗?", "通知", MessageBoxButtons.OKCancel)))
    374                     {
    375                         TEntity entity;//= System.Activator.CreateInstance<TEntity>();
    376                         if (sqlStrConstruct == null)
    377                         {
    378                             sqlStrConstruct = System.Activator.CreateInstance<TSqlStrConstruct>();
    379                         }
    380                         foreach (ListViewItem item in this.lvList.SelectedItems)
    381                         {
    382                             //this.EntityType.GetProperty(this.repository.GetEntityKeyName()).SetValue(entity, item.Name, null);
    383                             entity = this.repository.FindBy(item.Name) as TEntity;
    384                             this.repository.Delete(entity);
    385                             if (sqlStrConstruct.TableName.Equals("TB_SYS_LOG"))
    386                             {
    387                                 continue;
    388                             }
    389                             Log.LogWriter.Write(string.Format("删除了信息,表为{0},主键为:{1}", sqlStrConstruct.TableName, item.Name));
    390                         }
    391                         TListPager_Load(sender, e);
    392                     }
    393                     break;
    394             }
    395         }
    396         CSearcher cSearcher;
    397         protected abstract CSearcher CSearcher
    398         {
    399             get;
    400         }
    401     }
  • 相关阅读:
    配置支持Basler的API函数的开发环境
    调用约定
    进程间通讯之 命名管道
    进程间通讯。
    使用结构体返回多个参数。
    目的:让目标程序在内存中只有一个实例
    数学问题
    机试二
    pycharm安装TensorFlow
    机器学习一
  • 原文地址:https://www.cnblogs.com/yomho/p/3287142.html
Copyright © 2020-2023  润新知