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 }