首页 > 代码库 > ASP.net 自定义控件GridView
ASP.net 自定义控件GridView
1 using System; 2 using System.Web.UI; 3 using System.Web.UI.WebControls; 4 using System.Web.UI.HtmlControls; 5 using System.Collections; 6 using System.Collections.Generic; 7 using System.Text; 8 using System.Web.UI.Design; 9 using System.ComponentModel; 10 using SILK2010; 11 using System.Reflection; 12 using System.Web; 13 14 15 16 namespace FrameWorkV4.Controls 17 { 18 public class SMQGridView : System.Web.UI.WebControls.GridView 19 { 20 #region Private Property 21 private int dataCout; 22 private int DataCount 23 { 24 get 25 { 26 if (dataCout == 0 && DataSource != null) 27 { 28 if (DataSource is IEnumerable) 29 { 30 IEnumerable DataSourceList = (IEnumerable)DataSource; 31 IEnumerator enumerator = DataSourceList.GetEnumerator(); 32 enumerator.Reset(); 33 while (enumerator.MoveNext()) 34 { 35 dataCout++; 36 } 37 } 38 if (DataSource is IListSource) 39 { 40 IListSource DataSourceList = (IListSource)DataSource; 41 IList list = DataSourceList.GetList(); 42 dataCout = list.Count; 43 } 44 } 45 return dataCout; 46 } 47 } 48 private int FirstPageIndex 49 { 50 get 51 { 52 return 0; 53 } 54 } 55 private int PreviosPageIndex 56 { 57 get 58 { 59 return Math.Max(PageIndex - 1, 0); 60 } 61 } 62 private int NextPageIndex 63 { 64 get 65 { 66 return Math.Min(PageIndex + 1, PageCount - 1); 67 } 68 } 69 private int LastPageIndex 70 { 71 get 72 { 73 return PageCount - 1; 74 } 75 } 76 //Added by tony at 2010.12.16 77 private int TotalDataCount 78 { 79 get 80 { 81 object o = ViewState["TotalDataCount"]; 82 int _dataCout = 0; 83 if (o != null) 84 { 85 _dataCout = int.Parse(o.ToString()); 86 } 87 return _dataCout; 88 } 89 set 90 { 91 ViewState["TotalDataCount"] = value; 92 } 93 } 94 #endregion 95 96 #region Public Property 97 public string OrderByField 98 { 99 get 100 { 101 object o = ViewState["OrderByField"]; 102 if (o == null) 103 { 104 for (int i = 0; i < Columns.Count; i++) 105 { 106 if (Columns[i].SortExpression.Trim() != string.Empty) 107 return Columns[i].SortExpression; 108 } 109 return string.Empty; 110 } 111 return (string)o; 112 } 113 set 114 { 115 ViewState["OrderByField"] = value; 116 } 117 } 118 public bool OrderByAsc 119 { 120 get 121 { 122 object o = ViewState["OrderByAsc"]; 123 if (o == null) 124 { 125 return true; 126 } 127 return (bool)o; 128 } 129 set 130 { 131 ViewState["OrderByAsc"] = value; 132 } 133 } 134 public string EntityType; 135 public string PrimaryKeyName; 136 public string GridViewName; 137 private bool showSaveChangesButton 138 { 139 get 140 { 141 foreach (DataControlField field in Columns) 142 { 143 if (field is SMQGridViewField) 144 return true; 145 } 146 return false; 147 } 148 } 149 #endregion 150 151 152 private bool _isSaveChange = true; 153 public bool _IsSaveChange 154 { 155 get 156 { 157 return _isSaveChange; 158 } 159 set 160 { 161 _isSaveChange = value; 162 } 163 164 } 165 166 167 //Added by tony at 2010.12.16 168 public override object DataSource 169 { 170 get 171 { 172 return base.DataSource; 173 } 174 set 175 { 176 base.DataSource = value; 177 int _dataCout = 0; 178 if (value is IEnumerable) 179 { 180 IEnumerable DataSourceList = (IEnumerable)value; 181 IEnumerator enumerator = DataSourceList.GetEnumerator(); 182 enumerator.Reset(); 183 while (enumerator.MoveNext()) 184 { 185 _dataCout++; 186 } 187 } 188 if (value is IListSource) 189 { 190 IListSource DataSourceList = (IListSource)DataSource; 191 IList list = DataSourceList.GetList(); 192 _dataCout = list.Count; 193 } 194 TotalDataCount = _dataCout; 195 } 196 } 197 198 private bool _isAllowSaveChange = false; 199 200 201 202 public bool IsAllowSaveChange 203 { 204 get { return _isAllowSaveChange; } 205 set { _isAllowSaveChange = value; } 206 } 207 208 209 private bool _alwaysShowSaveChange = true; 210 211 public bool AlwaysShowSaveChange 212 { 213 get { return _alwaysShowSaveChange; } 214 set { _alwaysShowSaveChange = value; } 215 } 216 private bool _isAllowAllEdit = false; 217 218 public bool IsAllowAllEdit 219 { 220 get { return _isAllowAllEdit; } 221 set { _isAllowAllEdit = value; } 222 } 223 224 private int _gv_ProgramProductId; 225 public int GV_ProgramProductId 226 { 227 get { return _gv_ProgramProductId; } 228 set { _gv_ProgramProductId = value; } 229 } 230 231 private bool _isProductFeature = false; 232 public bool IsProductFeature 233 { 234 get { return _isProductFeature; } 235 set { _isProductFeature = value; } 236 } 237 238 private bool _isSweepCart = false; 239 public bool IsSweepCart 240 { 241 get { return _isSweepCart; } 242 set { _isSweepCart = value; } 243 } 244 245 private bool _isprogramproductordertype = false; 246 public bool IsProgramProductOrderType 247 { 248 get 249 { 250 return _isprogramproductordertype; 251 } 252 set 253 { 254 _isprogramproductordertype = value; 255 } 256 } 257 258 private bool _isprogramproductcustomertype = false; 259 260 public bool IsProgramProductCustomerType 261 { 262 get 263 { 264 return _isprogramproductcustomertype; 265 } 266 set 267 { 268 _isprogramproductcustomertype = value; 269 } 270 } 271 272 private bool _isReducePrice = false; 273 public bool IsReducePrice 274 { 275 get { return _isReducePrice; } 276 set { _isReducePrice = value; } 277 } 278 279 private int _programproductid = 0; 280 public int ProgramProductId 281 { 282 get 283 { 284 return _programproductid; 285 } 286 set 287 { 288 _programproductid = value; 289 } 290 } 291 292 private bool _isAllowPage = true; 293 public bool IsAllowPage 294 { 295 get { return _isAllowPage; } 296 set { _isAllowPage = value; } 297 } 298 299 300 private bool _updateppstatus = false; 301 public bool UpdatePPStatus 302 { 303 get 304 { 305 return _updateppstatus; 306 } 307 set 308 { 309 _updateppstatus = value; 310 } 311 } 312 313 314 private bool bHasRecord 315 { 316 get 317 { 318 try 319 { 320 return bool.Parse(ViewState["bHasRecord"].ToString()); 321 } 322 catch 323 { 324 return false; 325 } 326 } 327 set 328 { 329 ViewState["bHasRecord"] = value.ToString(); 330 } 331 } 332 333 protected override void OnDataBinding(EventArgs e) 334 { 335 if (DataSource == null) 336 { 337 base.OnDataBinding(e); 338 return; 339 } 340 341 var aa = DataSource as List<SILK2010.Entity>; 342 if ((DataSource is SILK2010.EntityList) == false) 343 { 344 base.OnDataBinding(e); 345 return; 346 } 347 348 349 SILK2010.EntityList ds = DataSource as SILK2010.EntityList; 350 if (!string.IsNullOrEmpty(OrderByField)) 351 { 352 ds.Sort(OrderByField, OrderByAsc); 353 } 354 if (!string.IsNullOrEmpty(PrimaryKeyName)) 355 { 356 this.DataKeyNames = new string[1] { PrimaryKeyName }; 357 } 358 if (!_isAllowPage) 359 { 360 this.AllowPaging = false; 361 } 362 else 363 { 364 this.AllowPaging = true; 365 } 366 367 if (ds.Count == 0) 368 { 369 if (string.IsNullOrEmpty(this.EntityType)) 370 { 371 return; 372 } 373 374 Assembly asmb = Assembly.LoadFrom(HttpContext.Current.Server.MapPath("~/Bin/ProTexusModel.dll")); 375 Entity entity = System.Activator.CreateInstance(asmb.GetType("ProTexus.Model." + EntityType)) as Entity; 376 377 ds.Add(entity); 378 379 this.DataSource = ds; 380 381 this.bHasRecord = false; 382 } 383 else 384 { 385 this.bHasRecord = true; 386 } 387 base.OnDataBinding(e); 388 } 389 390 private void SetAdvancedPage(GridViewRowEventArgs e) 391 { 392 HtmlGenericControl prolistbottom = new HtmlGenericControl("DIV"); 393 e.Row.Cells[0].Controls.Add(prolistbottom); 394 prolistbottom.Attributes.Add("class", "prolistbottom textindent10"); 395 HtmlGenericControl floatleft = new HtmlGenericControl("DIV"); 396 floatleft.Attributes.Add("class", "floatleft fontwhite"); 397 prolistbottom.Controls.Add(floatleft); 398 HtmlGenericControl pagesort = new HtmlGenericControl("DIV"); 399 floatleft.Controls.Add(pagesort); 400 pagesort.Attributes.Add("class", "pagesort"); 401 402 LiteralControl Pages = new LiteralControl(); 403 Pages.Text = "<b>Page(s):</>"; 404 pagesort.Controls.Add(Pages); 405 406 LiteralControl _space = new LiteralControl(); 407 408 //Build "First" and "Previous" button cell. 409 Button _btnFirst = new Button(); 410 _btnFirst.Text = "First"; 411 _btnFirst.CssClass = "button"; 412 _btnFirst.CommandName = "Pager"; 413 _btnFirst.CommandArgument = FirstPageIndex.ToString(); 414 pagesort.Controls.Add(_btnFirst); 415 416 Button _btnPrevious = new Button(); 417 _btnPrevious.Text = "Previous"; 418 _btnPrevious.CssClass = "button"; 419 _btnPrevious.CommandName = "Pager"; 420 _btnPrevious.CommandArgument = PreviosPageIndex.ToString(); 421 pagesort.Controls.Add(_btnPrevious); 422 423 //Build Page list button. 424 for (int i = 0; i < PageCount; i++) 425 { 426 if (i > PageIndex - 10 && i < PageIndex + 10) 427 { 428 LinkButton _pageLink = new LinkButton(); 429 int cur = i + 1; 430 if (PageIndex == i) 431 { 432 _pageLink.Text = "<b><font size=4>" + cur.ToString() + "</font></>"; 433 } 434 else 435 { 436 _pageLink.Text = "" + cur.ToString() + ""; 437 } 438 _pageLink.CommandName = "Pager"; 439 _pageLink.CommandArgument = i.ToString(); 440 pagesort.Controls.Add(_pageLink); 441 442 if (PageIndex == i) 443 { 444 _pageLink.Enabled = false; 445 } 446 447 _space = new LiteralControl(); 448 _space.Text = " "; 449 pagesort.Controls.Add(_space); 450 } 451 } 452 453 //Build "Next" and "Last" button cell. 454 _space = new LiteralControl(); 455 _space.Text = " "; 456 457 Button _btnNext = new Button(); 458 _btnNext.Text = "Next"; 459 _btnNext.CssClass = "button"; 460 _btnNext.CommandName = "Pager"; 461 _btnNext.CommandArgument = NextPageIndex.ToString(); 462 pagesort.Controls.Add(_btnNext); 463 pagesort.Controls.Add(_space); 464 465 Button _btnLast = new Button(); 466 _btnLast.Text = "Last"; 467 _btnLast.CssClass = "button"; 468 _btnLast.CommandName = "Pager"; 469 _btnLast.CommandArgument = LastPageIndex.ToString(); 470 pagesort.Controls.Add(_btnLast); 471 pagesort.Controls.Add(_space); 472 473 //Build "Showing Result:" cell. 474 LiteralControl PageResult = new LiteralControl(); 475 int _currentPageBeginNo = 0; 476 int _currentPageEndNo = 0; 477 478 //if (DataCount != 0) 479 //{ 480 // _currentPageBeginNo = PageIndex * PageSize + 1; 481 // _currentPageEndNo = _currentPageBeginNo + PageSize - 1; 482 483 // if (_currentPageEndNo > DataCount) 484 // { 485 // _currentPageEndNo = DataCount; 486 // } 487 //} 488 489 //PageResult.Text = "Showing Result: " + _currentPageBeginNo.ToString() + "-"; 490 //if (IsAllowPage) 491 //{ 492 // PageResult.Text += _currentPageEndNo.ToString(); 493 //} 494 //else 495 //{ 496 // PageResult.Text += DataCount.ToString(); 497 //} 498 //PageResult.Text += " of " + DataCount.ToString(); 499 if (TotalDataCount != 0) 500 { 501 _currentPageBeginNo = PageIndex * PageSize + 1; 502 _currentPageEndNo = _currentPageBeginNo + PageSize - 1; 503 504 if (_currentPageEndNo > TotalDataCount) 505 { 506 _currentPageEndNo = TotalDataCount; 507 } 508 } 509 510 PageResult.Text = "Showing Result: " + _currentPageBeginNo.ToString() + "-"; 511 if (IsAllowPage) 512 { 513 PageResult.Text += _currentPageEndNo.ToString(); 514 } 515 else 516 { 517 PageResult.Text += TotalDataCount.ToString(); 518 } 519 PageResult.Text += " of " + TotalDataCount.ToString(); 520 pagesort.Controls.Add(PageResult); 521 522 //Build Save Changes Button Cell 523 HtmlGenericControl floatright = new HtmlGenericControl("DIV"); 524 floatright.Attributes.Add("class", "floatright"); 525 if (showSaveChangesButton && IsAllowSaveChange && AlwaysShowSaveChange) 526 { 527 Button btn = new Button(); 528 btn.CommandName = "SaveChanges"; 529 btn.Text = "Save Changes"; 530 btn.CssClass = "buttonBig"; 531 floatright.Controls.Add(btn); 532 } 533 534 if (showSaveChangesButton && IsAllowAllEdit) 535 { 536 Button btn = new Button(); 537 btn.CommandName = "AllEdit"; 538 btn.Text = "Edit All"; 539 btn.CssClass = "buttonBig"; 540 floatright.Controls.Add(btn); 541 } 542 prolistbottom.Controls.Add(floatright); 543 544 //HtmlGenericControl floatclear = new HtmlGenericControl("DIV"); 545 //floatclear.Attributes.Add("class", "floatclear"); 546 //prolistbottom.Controls.Add(floatclear); 547 548 if (PageIndex == 0) 549 { 550 _btnFirst.Enabled = false; 551 _btnPrevious.Enabled = false; 552 } 553 if (PageIndex == PageCount - 1) 554 { 555 _btnNext.Enabled = false; 556 _btnLast.Enabled = false; 557 } 558 } 559 560 protected override void OnRowCreated(GridViewRowEventArgs e) 561 { 562 switch (e.Row.RowType) 563 { 564 case DataControlRowType.Footer: 565 if (this.bHasRecord && Rows.Count != 0) 566 { 567 e.Row.Cells[0].ColumnSpan = Columns.Count; 568 for (int i = 0; i < Columns.Count - 1; i++) 569 e.Row.Cells.RemoveAt(1); 570 SetAdvancedPage(e); 571 PagerSettings.Visible = false; 572 ShowFooter = true; 573 } 574 break; 575 case DataControlRowType.Header: 576 #region Build Header 577 for (int i = 0; i < Columns.Count; i++) 578 { 579 TableCell cell = e.Row.Cells[i]; 580 if (Columns[i].SortExpression.Trim().Length != 0) 581 { 582 LinkButton _headText = new LinkButton(); 583 //_headText.CssClass = HeadCss; 584 _headText.Text = Columns[i].HeaderText; 585 _headText.ToolTip = "Sort this column"; 586 _headText.CommandName = "Sort"; 587 _headText.CommandArgument = Columns[i].SortExpression; 588 589 cell.Controls.Add(_headText); 590 591 if (OrderByField == Columns[i].SortExpression) 592 { 593 ImageButton _headImage = new ImageButton(); 594 _headImage.CommandName = "Sort"; 595 _headImage.CommandArgument = Columns[i].SortExpression; 596 _headImage.ToolTip = "Sort this column"; 597 if (OrderByAsc == true) 598 { 599 _headImage.ImageUrl = "~/Skin/PROTEXUS/Images/SortDirDESC.gif"; 600 601 } 602 else 603 { 604 _headImage.ImageUrl = "~/Skin/PROTEXUS/Images/SortDirASC.gif"; 605 } 606 cell.Controls.Add(_headImage); 607 } 608 609 } 610 else 611 { 612 LinkButton _headText = new LinkButton(); 613 _headText.Text = Columns[i].HeaderText; 614 cell.Controls.Add(_headText); 615 } 616 617 618 if (Columns[i] is SMQGridViewField) 619 { 620 SMQGridViewField field = Columns[i] as SMQGridViewField; 621 if (field.CanEdit) 622 { 623 if (!IsAllowSaveChange) 624 IsAllowSaveChange = true; 625 626 ImageButton _headEdit = new ImageButton(); 627 _headEdit.CommandName = "EditColumn"; 628 _headEdit.CommandArgument = field.DataField; 629 _headEdit.ToolTip = "Edit this column"; 630 if (field.IsEditing) 631 { 632 _headEdit.ImageUrl = "~/Skin/PROTEXUS/Images/icon_edit.gif"; 633 } 634 else 635 { 636 _headEdit.ImageUrl = "~/Skin/PROTEXUS/Images/icon_edit_f2.gif"; 637 } 638 cell.Controls.Add(_headEdit); 639 } 640 if (field.fieldType == FieldType.Delete) 641 { 642 Image img = new Image(); 643 img.ImageUrl = "~/Skin/PROTEXUS/Images/icon_del.gif"; 644 cell.Controls.Add(img); 645 CheckBox cbx = new CheckBox(); 646 cell.Controls.Add(cbx); 647 } 648 if (cell.Controls.Count == 0) 649 { 650 LiteralControl lbl = new LiteralControl(); 651 lbl.Text = field.HeaderText; 652 cell.Controls.Add(lbl); 653 } 654 } 655 } 656 #endregion 657 break; 658 default: 659 if (this.bHasRecord) 660 { 661 e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml("#F2F2F2"); 662 base.OnRowCreated(e); 663 } 664 665 break; 666 } 667 } 668 public void SetNoRecordRow(GridViewRowEventArgs e) 669 { 670 //if (!this.bHasRecord) 671 //{ 672 // for (int i = 0; i < e.Row.Cells.Count; i++) 673 // { 674 // e.Row.Cells[i].Text = " "; 675 // } 676 //} 677 } 678 679 protected override void OnRowCommand(GridViewCommandEventArgs e) 680 { 681 switch (e.CommandName) 682 { 683 case "Sort": 684 OrderByField = e.CommandArgument.ToString(); 685 OrderByAsc = !OrderByAsc; 686 break; 687 case "Pager": 688 PageIndex = int.Parse(e.CommandArgument.ToString()); 689 break; 690 case "EditColumn": 691 foreach (DataControlField field in Columns) 692 { 693 if (field is SMQGridViewField) 694 { 695 SMQGridViewField fld = field as SMQGridViewField; 696 if (fld.DataField == e.CommandArgument.ToString()) 697 fld.IsEditing = !fld.IsEditing; 698 } 699 } 700 break; 701 case "AllEdit": 702 { 703 foreach (DataControlField field in Columns) 704 { 705 if (field is SMQGridViewField) 706 { 707 SMQGridViewField fld = field as SMQGridViewField; 708 fld.IsEditing = true; 709 } 710 } 711 break; 712 } 713 case "SaveChanges": 714 if (_IsSaveChange) 715 { 716 if (!SaveChanges()) 717 return; 718 } 719 break; 720 } 721 base.OnRowCommand(e); 722 } 723 724 protected override void Render(HtmlTextWriter writer) 725 { 726 this.Style.Add("border-collapse", "separate!important"); 727 writer.Write("<div class=\"proList\"><div class=\"prolistTop fontbold textindent10\">" + GridViewName + "</div>"); 728 base.Render(writer); 729 writer.Write("</div>"); 730 731 ScriptManager.RegisterStartupScript(this, this.GetType(), this.UniqueID, this.SetGVNoRecordScript(), true); 732 733 } 734 735 private bool SaveChanges() 736 { 737 if (string.IsNullOrEmpty(EntityType)) 738 return false; 739 740 #region Validate has smq field. 741 bool hasSMQField = false; 742 foreach (DataControlField field in this.Columns) 743 { 744 if (field is SMQGridViewField) 745 { 746 SMQGridViewField fie = field as SMQGridViewField; 747 if (fie.IsEditing || fie.fieldType == FieldType.Delete) 748 hasSMQField = true; 749 } 750 } 751 if (!hasSMQField) 752 return false; 753 #endregion 754 755 EntityList DeleteList = new EntityList(); 756 EntityList UpdateList = new EntityList(); 757 foreach (GridViewRow row in Rows) 758 { 759 int PrimaryKeyValue = http://www.mamicode.com/int.Parse(DataKeys[row.RowIndex].Value.ToString()); 760 761 Entity entity = System.Activator.CreateInstance(Type.GetType("ProTexus.Model." + EntityType)) as Entity; 762 763 #region Get Table Name 764 PropertyInfo[] properties = entity.GetType().GetProperties(); 765 foreach (BindingClassAttribute attr in entity.GetType().GetCustomAttributes(typeof(BindingClassAttribute), true)) 766 { 767 entity.TableName = attr.TableName; 768 break; 769 } 770 #endregion 771 772 #region Get Original Data 773 string Usp_SQL = "SELECT top 1 * FROM [" + entity.TableName + "] WHERE [" + PrimaryKeyName + "]=" + PrimaryKeyValue.ToString(); 774 ReturnValue _result = entity.getEntity(Usp_SQL); 775 if (!_result.Success) 776 { 777 return false; 778 } 779 entity = _result.Object; 780 #endregion 781 782 #region Set New Data 783 foreach (DataControlFieldCell cell in row.Cells) 784 { 785 if (cell.ContainingField is SMQGridViewField) 786 { 787 788 SMQGridViewField field = cell.ContainingField as SMQGridViewField; 789 790 if (field.fieldType == FieldType.Delete) 791 { 792 CheckBox cbx = cell.Controls[0] as CheckBox; 793 if (cbx.Checked) 794 { 795 entity.GetType().GetProperty(PrimaryKeyName).SetValue(entity, PrimaryKeyValue, null); 796 DeleteList.Add(entity); 797 goto NewRow; 798 } 799 } 800 else 801 { 802 if (field.IsEditing) 803 { 804 if (field.fieldType == FieldType.DateTime) 805 { 806 //DateSelector dsl = cell.Controls[0] as DateSelector; 807 //if (dsl.HasDateTime) 808 //{ 809 // entity.GetType().GetProperty(field.DataField).SetValue(entity, dsl.DateTime, null); 810 //} 811 //else 812 //{ 813 // cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Please provide a datetime</div>")); 814 // return false; 815 //} 816 } 817 if (field.fieldType == FieldType.CheckBox) 818 { 819 CheckBox cbx = cell.Controls[0] as CheckBox; 820 entity.GetType().GetProperty(field.DataField).SetValue(entity, cbx.Checked, null); 821 } 822 if (field.fieldType == FieldType.CheckBoxFeature) 823 { 824 CheckBox cbx = cell.Controls[0] as CheckBox; 825 string statusId = "Status"; 826 entity.GetType().GetProperty(statusId).SetValue(entity, cbx.Checked, null); 827 } 828 829 if (field.fieldType == FieldType.Status) 830 { 831 DropDownList ddl = cell.Controls[0] as DropDownList; 832 string contentStatusName = "ContentStatusId"; 833 if (!string.IsNullOrEmpty(field.ContentStatusName)) 834 { 835 contentStatusName = field.ContentStatusName; 836 } 837 entity.GetType().GetProperty(contentStatusName).SetValue(entity, int.Parse(ddl.SelectedValue), null); 838 } 839 840 if (field.fieldType == FieldType.PPStatus) 841 { 842 DropDownList ddl = cell.Controls[0] as DropDownList; 843 string contentStatusName = "ContentStatusId"; 844 if (!string.IsNullOrEmpty(field.ContentStatusName)) 845 { 846 contentStatusName = field.ContentStatusName; 847 } 848 entity.GetType().GetProperty(contentStatusName).SetValue(entity, int.Parse(ddl.SelectedValue), null); 849 } 850 851 if (field.fieldType == FieldType.Feature) 852 { 853 DropDownList ddl_Feature = cell.Controls[0] as DropDownList; 854 string locationId = "Location"; 855 if (!string.IsNullOrEmpty(field.FeatureLocation)) 856 { 857 locationId = field.FeatureLocation; 858 } 859 entity.GetType().GetProperty(locationId).SetValue(entity, int.Parse(ddl_Feature.SelectedValue), null); 860 } 861 862 if (field.fieldType == FieldType.Int) 863 { 864 TextBox txt = cell.Controls[0] as TextBox; 865 if (SILK2010.Utilities.isInteger(txt.Text)) 866 { 867 entity.GetType().GetProperty(field.DataField).SetValue(entity, int.Parse(txt.Text), null); 868 } 869 else 870 { 871 cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Please provide a integer</div>")); 872 return false; 873 } 874 } 875 876 if (field.fieldType == FieldType.MaxQty) 877 { 878 TextBox txt = cell.Controls[0] as TextBox; 879 880 if (!string.IsNullOrEmpty(txt.Text)) 881 { 882 if (SILK2010.Utilities.IsDouble(txt.Text.Trim())) 883 { 884 //if (int.Parse(txt.Text.Trim()) <= 0) 885 //{ 886 // cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Duration‘s data must larger than 0</div>")); 887 // return false; 888 889 //} 890 //else 891 //{ 892 entity.GetType().GetProperty(field.DataField).SetValue(entity, int.Parse(txt.Text), null); 893 //} 894 } 895 else 896 { 897 cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Please provide a number</div>")); 898 return false; 899 } 900 } 901 else 902 { 903 entity.GetType().GetProperty(field.DataField).SetValue(entity, null, null); 904 905 } 906 907 908 } 909 if (field.fieldType == FieldType.Double) 910 { 911 TextBox txt = cell.Controls[0] as TextBox; 912 if (SILK2010.Utilities.IsDouble(txt.Text)) 913 { 914 entity.GetType().GetProperty(field.DataField).SetValue(entity, double.Parse(txt.Text), null); 915 } 916 else 917 { 918 cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Please provide a number</div>")); 919 return false; 920 } 921 } 922 if (field.fieldType == FieldType.TextBox || field.fieldType == FieldType.LinkButton) 923 { 924 TextBox txt = cell.Controls[0] as TextBox; 925 entity.GetType().GetProperty(field.DataField).SetValue(entity, txt.Text, null); 926 } 927 if (field.fieldType == FieldType.Duration) 928 { 929 TextBox txt_Duration = cell.Controls[0] as TextBox; 930 DropDownList ddl_TimeType = cell.Controls[1] as DropDownList; 931 932 if (!string.IsNullOrEmpty(txt_Duration.Text)) 933 { 934 if (SILK2010.Utilities.IsDouble(txt_Duration.Text.Trim())) 935 { 936 //if (double.Parse(txt_Duration.Text.Trim()) <= 0) 937 //{ 938 // cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Duration‘s data must larger than 0</div>")); 939 // return false; 940 //} 941 //else 942 //{ 943 if (ddl_TimeType.SelectedValue =http://www.mamicode.com/= "Order") 944 { 945 entity.GetType().GetProperty("Duration").SetValue(entity, double.Parse("1"), null); 946 entity.GetType().GetProperty("TimeType").SetValue(entity, ddl_TimeType.SelectedValue, null); 947 948 } 949 else 950 { 951 952 entity.GetType().GetProperty("Duration").SetValue(entity, double.Parse(txt_Duration.Text.Trim()), null); 953 entity.GetType().GetProperty("TimeType").SetValue(entity, ddl_TimeType.SelectedValue, null); 954 } 955 //} 956 957 } 958 else 959 { 960 961 cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Please provide a number for Duration field</div>")); 962 return false; 963 964 } 965 } 966 else 967 { 968 if (ddl_TimeType.SelectedValue =http://www.mamicode.com/= "Order") 969 { 970 entity.GetType().GetProperty("Duration").SetValue(entity, double.Parse("1"), null); 971 entity.GetType().GetProperty("TimeType").SetValue(entity, ddl_TimeType.SelectedValue, null); 972 973 } 974 else 975 { 976 entity.GetType().GetProperty("Duration").SetValue(entity, null, null); 977 entity.GetType().GetProperty("TimeType").SetValue(entity, null, null); 978 } 979 980 } 981 982 } 983 } 984 } 985 } 986 } 987 988 989 UpdateList.Add(entity); 990 991 992 //UpdateList.Add(entity); 993 994 NewRow: 995 continue; 996 997 #endregion 998 999 }1000 1001 #region Save New Data1002 1003 Entity entityForTrans = System.Activator.CreateInstance(Type.GetType("ZstoreAdmin.Model." + EntityType)) as Entity;1004 1005 Transaction trans = new Transaction(entityForTrans.DataConnectProviders);1006 1007 ReturnValue result = new ReturnValue();1008 1009 foreach (Entity entity in DeleteList)1010 {1011 result = entity.Delete(trans);1012 if (!result.Success)1013 {1014 if (trans.InTransaction)1015 trans.RollbackTransaction();1016 return false;1017 }1018 }1019 1020 1021 1022 foreach (Entity entity in UpdateList)1023 {1024 result = entity.Update(trans);1025 if (!result.Success)1026 {1027 if (trans.InTransaction)1028 trans.RollbackTransaction();1029 return false;1030 }1031 }1032 1033 1034 trans.CommitTransaction();1035 1036 #endregion1037 1038 #region Restore Grid State1039 1040 foreach (DataControlField field in this.Columns)1041 {1042 if (field is SMQGridViewField)1043 {1044 ((SMQGridViewField)field).IsEditing = false;1045 }1046 }1047 1048 #endregion1049 1050 return true;1051 }1052 1053 public bool SaveChangesAfterValidation()1054 {1055 return this.SaveChanges();1056 }1057 1058 private string SetGVNoRecordScript()1059 {1060 1061 if (this.bHasRecord)1062 {1063 return "";1064 }1065 1066 1067 StringBuilder sb = new StringBuilder();1068 1069 sb.Append("\r\n function SetGVNoRecord" + this.ClientID + "(){");1070 sb.Append("\r\n var gv = document.getElementById(‘" + this.ClientID + "‘);");1071 sb.Append("\r\n if(gv == null){ return;}");1072 sb.Append("\r\n var rowCount = gv.rows.length;");1073 sb.Append("\r\n for(var i = rowCount - 1 ; i > 0;i--){");1074 sb.Append("\r\n if(i == 1){");1075 sb.Append("\r\n for(var j =0 ; j < gv.rows[i].cells.length;j++){");1076 sb.Append("\r\n gv.rows[i].cells[j].innerHTML=‘ ‘;");1077 sb.Append("\r\n }");1078 sb.Append("\r\n }");1079 sb.Append("\r\n else {");1080 sb.Append("\r\n gv.deleteRow(i);");1081 sb.Append("\r\n }");1082 sb.Append("\r\n }");1083 sb.Append("\r\n }");1084 sb.Append("\r\n SetGVNoRecord" + this.ClientID + "();");1085 1086 return sb.ToString();1087 }1088 }1089 }
1 using System; 2 using System.Web.UI; 3 using System.Web.UI.WebControls; 4 using System.Web.UI.HtmlControls; 5 using System.Collections; 6 using System.Collections.Generic; 7 using System.Text; 8 using System.Web.UI.Design; 9 using System.ComponentModel; 10 using SILK2010; 11 using System.Reflection; 12 using System.Web; 13 14 15 16 namespace FrameWorkV4.Controls 17 { 18 public class SMQGridView : System.Web.UI.WebControls.GridView 19 { 20 #region Private Property 21 private int dataCout; 22 private int DataCount 23 { 24 get 25 { 26 if (dataCout == 0 && DataSource != null) 27 { 28 if (DataSource is IEnumerable) 29 { 30 IEnumerable DataSourceList = (IEnumerable)DataSource; 31 IEnumerator enumerator = DataSourceList.GetEnumerator(); 32 enumerator.Reset(); 33 while (enumerator.MoveNext()) 34 { 35 dataCout++; 36 } 37 } 38 if (DataSource is IListSource) 39 { 40 IListSource DataSourceList = (IListSource)DataSource; 41 IList list = DataSourceList.GetList(); 42 dataCout = list.Count; 43 } 44 } 45 return dataCout; 46 } 47 } 48 private int FirstPageIndex 49 { 50 get 51 { 52 return 0; 53 } 54 } 55 private int PreviosPageIndex 56 { 57 get 58 { 59 return Math.Max(PageIndex - 1, 0); 60 } 61 } 62 private int NextPageIndex 63 { 64 get 65 { 66 return Math.Min(PageIndex + 1, PageCount - 1); 67 } 68 } 69 private int LastPageIndex 70 { 71 get 72 { 73 return PageCount - 1; 74 } 75 } 76 //Added by tony at 2010.12.16 77 private int TotalDataCount 78 { 79 get 80 { 81 object o = ViewState["TotalDataCount"]; 82 int _dataCout = 0; 83 if (o != null) 84 { 85 _dataCout = int.Parse(o.ToString()); 86 } 87 return _dataCout; 88 } 89 set 90 { 91 ViewState["TotalDataCount"] = value; 92 } 93 } 94 #endregion 95 96 #region Public Property 97 public string OrderByField 98 { 99 get 100 { 101 object o = ViewState["OrderByField"]; 102 if (o == null) 103 { 104 for (int i = 0; i < Columns.Count; i++) 105 { 106 if (Columns[i].SortExpression.Trim() != string.Empty) 107 return Columns[i].SortExpression; 108 } 109 return string.Empty; 110 } 111 return (string)o; 112 } 113 set 114 { 115 ViewState["OrderByField"] = value; 116 } 117 } 118 public bool OrderByAsc 119 { 120 get 121 { 122 object o = ViewState["OrderByAsc"]; 123 if (o == null) 124 { 125 return true; 126 } 127 return (bool)o; 128 } 129 set 130 { 131 ViewState["OrderByAsc"] = value; 132 } 133 } 134 public string EntityType; 135 public string PrimaryKeyName; 136 public string GridViewName; 137 private bool showSaveChangesButton 138 { 139 get 140 { 141 foreach (DataControlField field in Columns) 142 { 143 if (field is SMQGridViewField) 144 return true; 145 } 146 return false; 147 } 148 } 149 #endregion 150 151 152 private bool _isSaveChange = true; 153 public bool _IsSaveChange 154 { 155 get 156 { 157 return _isSaveChange; 158 } 159 set 160 { 161 _isSaveChange = value; 162 } 163 164 } 165 166 167 //Added by tony at 2010.12.16 168 public override object DataSource 169 { 170 get 171 { 172 return base.DataSource; 173 } 174 set 175 { 176 base.DataSource = value; 177 int _dataCout = 0; 178 if (value is IEnumerable) 179 { 180 IEnumerable DataSourceList = (IEnumerable)value; 181 IEnumerator enumerator = DataSourceList.GetEnumerator(); 182 enumerator.Reset(); 183 while (enumerator.MoveNext()) 184 { 185 _dataCout++; 186 } 187 } 188 if (value is IListSource) 189 { 190 IListSource DataSourceList = (IListSource)DataSource; 191 IList list = DataSourceList.GetList(); 192 _dataCout = list.Count; 193 } 194 TotalDataCount = _dataCout; 195 } 196 } 197 198 private bool _isAllowSaveChange = false; 199 200 201 202 public bool IsAllowSaveChange 203 { 204 get { return _isAllowSaveChange; } 205 set { _isAllowSaveChange = value; } 206 } 207 208 209 private bool _alwaysShowSaveChange = true; 210 211 public bool AlwaysShowSaveChange 212 { 213 get { return _alwaysShowSaveChange; } 214 set { _alwaysShowSaveChange = value; } 215 } 216 private bool _isAllowAllEdit = false; 217 218 public bool IsAllowAllEdit 219 { 220 get { return _isAllowAllEdit; } 221 set { _isAllowAllEdit = value; } 222 } 223 224 private int _gv_ProgramProductId; 225 public int GV_ProgramProductId 226 { 227 get { return _gv_ProgramProductId; } 228 set { _gv_ProgramProductId = value; } 229 } 230 231 private bool _isProductFeature = false; 232 public bool IsProductFeature 233 { 234 get { return _isProductFeature; } 235 set { _isProductFeature = value; } 236 } 237 238 private bool _isSweepCart = false; 239 public bool IsSweepCart 240 { 241 get { return _isSweepCart; } 242 set { _isSweepCart = value; } 243 } 244 245 private bool _isprogramproductordertype = false; 246 public bool IsProgramProductOrderType 247 { 248 get 249 { 250 return _isprogramproductordertype; 251 } 252 set 253 { 254 _isprogramproductordertype = value; 255 } 256 } 257 258 private bool _isprogramproductcustomertype = false; 259 260 public bool IsProgramProductCustomerType 261 { 262 get 263 { 264 return _isprogramproductcustomertype; 265 } 266 set 267 { 268 _isprogramproductcustomertype = value; 269 } 270 } 271 272 private bool _isReducePrice = false; 273 public bool IsReducePrice 274 { 275 get { return _isReducePrice; } 276 set { _isReducePrice = value; } 277 } 278 279 private int _programproductid = 0; 280 public int ProgramProductId 281 { 282 get 283 { 284 return _programproductid; 285 } 286 set 287 { 288 _programproductid = value; 289 } 290 } 291 292 private bool _isAllowPage = true; 293 public bool IsAllowPage 294 { 295 get { return _isAllowPage; } 296 set { _isAllowPage = value; } 297 } 298 299 300 private bool _updateppstatus = false; 301 public bool UpdatePPStatus 302 { 303 get 304 { 305 return _updateppstatus; 306 } 307 set 308 { 309 _updateppstatus = value; 310 } 311 } 312 313 314 private bool bHasRecord 315 { 316 get 317 { 318 try 319 { 320 return bool.Parse(ViewState["bHasRecord"].ToString()); 321 } 322 catch 323 { 324 return false; 325 } 326 } 327 set 328 { 329 ViewState["bHasRecord"] = value.ToString(); 330 } 331 } 332 333 protected override void OnDataBinding(EventArgs e) 334 { 335 if (DataSource == null) 336 { 337 base.OnDataBinding(e); 338 return; 339 } 340 341 var aa = DataSource as List<SILK2010.Entity>; 342 if ((DataSource is SILK2010.EntityList) == false) 343 { 344 base.OnDataBinding(e); 345 return; 346 } 347 348 349 SILK2010.EntityList ds = DataSource as SILK2010.EntityList; 350 if (!string.IsNullOrEmpty(OrderByField)) 351 { 352 ds.Sort(OrderByField, OrderByAsc); 353 } 354 if (!string.IsNullOrEmpty(PrimaryKeyName)) 355 { 356 this.DataKeyNames = new string[1] { PrimaryKeyName }; 357 } 358 if (!_isAllowPage) 359 { 360 this.AllowPaging = false; 361 } 362 else 363 { 364 this.AllowPaging = true; 365 } 366 367 if (ds.Count == 0) 368 { 369 if (string.IsNullOrEmpty(this.EntityType)) 370 { 371 return; 372 } 373 374 Assembly asmb = Assembly.LoadFrom(HttpContext.Current.Server.MapPath("~/Bin/ProTexusModel.dll")); 375 Entity entity = System.Activator.CreateInstance(asmb.GetType("ProTexus.Model." + EntityType)) as Entity; 376 377 ds.Add(entity); 378 379 this.DataSource = ds; 380 381 this.bHasRecord = false; 382 } 383 else 384 { 385 this.bHasRecord = true; 386 } 387 base.OnDataBinding(e); 388 } 389 390 private void SetAdvancedPage(GridViewRowEventArgs e) 391 { 392 HtmlGenericControl prolistbottom = new HtmlGenericControl("DIV"); 393 e.Row.Cells[0].Controls.Add(prolistbottom); 394 prolistbottom.Attributes.Add("class", "prolistbottom textindent10"); 395 HtmlGenericControl floatleft = new HtmlGenericControl("DIV"); 396 floatleft.Attributes.Add("class", "floatleft fontwhite"); 397 prolistbottom.Controls.Add(floatleft); 398 HtmlGenericControl pagesort = new HtmlGenericControl("DIV"); 399 floatleft.Controls.Add(pagesort); 400 pagesort.Attributes.Add("class", "pagesort"); 401 402 LiteralControl Pages = new LiteralControl(); 403 Pages.Text = "<b>Page(s):</>"; 404 pagesort.Controls.Add(Pages); 405 406 LiteralControl _space = new LiteralControl(); 407 408 //Build "First" and "Previous" button cell. 409 Button _btnFirst = new Button(); 410 _btnFirst.Text = "First"; 411 _btnFirst.CssClass = "button"; 412 _btnFirst.CommandName = "Pager"; 413 _btnFirst.CommandArgument = FirstPageIndex.ToString(); 414 pagesort.Controls.Add(_btnFirst); 415 416 Button _btnPrevious = new Button(); 417 _btnPrevious.Text = "Previous"; 418 _btnPrevious.CssClass = "button"; 419 _btnPrevious.CommandName = "Pager"; 420 _btnPrevious.CommandArgument = PreviosPageIndex.ToString(); 421 pagesort.Controls.Add(_btnPrevious); 422 423 //Build Page list button. 424 for (int i = 0; i < PageCount; i++) 425 { 426 if (i > PageIndex - 10 && i < PageIndex + 10) 427 { 428 LinkButton _pageLink = new LinkButton(); 429 int cur = i + 1; 430 if (PageIndex == i) 431 { 432 _pageLink.Text = "<b><font size=4>" + cur.ToString() + "</font></>"; 433 } 434 else 435 { 436 _pageLink.Text = "" + cur.ToString() + ""; 437 } 438 _pageLink.CommandName = "Pager"; 439 _pageLink.CommandArgument = i.ToString(); 440 pagesort.Controls.Add(_pageLink); 441 442 if (PageIndex == i) 443 { 444 _pageLink.Enabled = false; 445 } 446 447 _space = new LiteralControl(); 448 _space.Text = " "; 449 pagesort.Controls.Add(_space); 450 } 451 } 452 453 //Build "Next" and "Last" button cell. 454 _space = new LiteralControl(); 455 _space.Text = " "; 456 457 Button _btnNext = new Button(); 458 _btnNext.Text = "Next"; 459 _btnNext.CssClass = "button"; 460 _btnNext.CommandName = "Pager"; 461 _btnNext.CommandArgument = NextPageIndex.ToString(); 462 pagesort.Controls.Add(_btnNext); 463 pagesort.Controls.Add(_space); 464 465 Button _btnLast = new Button(); 466 _btnLast.Text = "Last"; 467 _btnLast.CssClass = "button"; 468 _btnLast.CommandName = "Pager"; 469 _btnLast.CommandArgument = LastPageIndex.ToString(); 470 pagesort.Controls.Add(_btnLast); 471 pagesort.Controls.Add(_space); 472 473 //Build "Showing Result:" cell. 474 LiteralControl PageResult = new LiteralControl(); 475 int _currentPageBeginNo = 0; 476 int _currentPageEndNo = 0; 477 478 //if (DataCount != 0) 479 //{ 480 // _currentPageBeginNo = PageIndex * PageSize + 1; 481 // _currentPageEndNo = _currentPageBeginNo + PageSize - 1; 482 483 // if (_currentPageEndNo > DataCount) 484 // { 485 // _currentPageEndNo = DataCount; 486 // } 487 //} 488 489 //PageResult.Text = "Showing Result: " + _currentPageBeginNo.ToString() + "-"; 490 //if (IsAllowPage) 491 //{ 492 // PageResult.Text += _currentPageEndNo.ToString(); 493 //} 494 //else 495 //{ 496 // PageResult.Text += DataCount.ToString(); 497 //} 498 //PageResult.Text += " of " + DataCount.ToString(); 499 if (TotalDataCount != 0) 500 { 501 _currentPageBeginNo = PageIndex * PageSize + 1; 502 _currentPageEndNo = _currentPageBeginNo + PageSize - 1; 503 504 if (_currentPageEndNo > TotalDataCount) 505 { 506 _currentPageEndNo = TotalDataCount; 507 } 508 } 509 510 PageResult.Text = "Showing Result: " + _currentPageBeginNo.ToString() + "-"; 511 if (IsAllowPage) 512 { 513 PageResult.Text += _currentPageEndNo.ToString(); 514 } 515 else 516 { 517 PageResult.Text += TotalDataCount.ToString(); 518 } 519 PageResult.Text += " of " + TotalDataCount.ToString(); 520 pagesort.Controls.Add(PageResult); 521 522 //Build Save Changes Button Cell 523 HtmlGenericControl floatright = new HtmlGenericControl("DIV"); 524 floatright.Attributes.Add("class", "floatright"); 525 if (showSaveChangesButton && IsAllowSaveChange && AlwaysShowSaveChange) 526 { 527 Button btn = new Button(); 528 btn.CommandName = "SaveChanges"; 529 btn.Text = "Save Changes"; 530 btn.CssClass = "buttonBig"; 531 floatright.Controls.Add(btn); 532 } 533 534 if (showSaveChangesButton && IsAllowAllEdit) 535 { 536 Button btn = new Button(); 537 btn.CommandName = "AllEdit"; 538 btn.Text = "Edit All"; 539 btn.CssClass = "buttonBig"; 540 floatright.Controls.Add(btn); 541 } 542 prolistbottom.Controls.Add(floatright); 543 544 //HtmlGenericControl floatclear = new HtmlGenericControl("DIV"); 545 //floatclear.Attributes.Add("class", "floatclear"); 546 //prolistbottom.Controls.Add(floatclear); 547 548 if (PageIndex == 0) 549 { 550 _btnFirst.Enabled = false; 551 _btnPrevious.Enabled = false; 552 } 553 if (PageIndex == PageCount - 1) 554 { 555 _btnNext.Enabled = false; 556 _btnLast.Enabled = false; 557 } 558 } 559 560 protected override void OnRowCreated(GridViewRowEventArgs e) 561 { 562 switch (e.Row.RowType) 563 { 564 case DataControlRowType.Footer: 565 if (this.bHasRecord && Rows.Count != 0) 566 { 567 e.Row.Cells[0].ColumnSpan = Columns.Count; 568 for (int i = 0; i < Columns.Count - 1; i++) 569 e.Row.Cells.RemoveAt(1); 570 SetAdvancedPage(e); 571 PagerSettings.Visible = false; 572 ShowFooter = true; 573 } 574 break; 575 case DataControlRowType.Header: 576 #region Build Header 577 for (int i = 0; i < Columns.Count; i++) 578 { 579 TableCell cell = e.Row.Cells[i]; 580 if (Columns[i].SortExpression.Trim().Length != 0) 581 { 582 LinkButton _headText = new LinkButton(); 583 //_headText.CssClass = HeadCss; 584 _headText.Text = Columns[i].HeaderText; 585 _headText.ToolTip = "Sort this column"; 586 _headText.CommandName = "Sort"; 587 _headText.CommandArgument = Columns[i].SortExpression; 588 589 cell.Controls.Add(_headText); 590 591 if (OrderByField == Columns[i].SortExpression) 592 { 593 ImageButton _headImage = new ImageButton(); 594 _headImage.CommandName = "Sort"; 595 _headImage.CommandArgument = Columns[i].SortExpression; 596 _headImage.ToolTip = "Sort this column"; 597 if (OrderByAsc == true) 598 { 599 _headImage.ImageUrl = "~/Skin/PROTEXUS/Images/SortDirDESC.gif"; 600 601 } 602 else 603 { 604 _headImage.ImageUrl = "~/Skin/PROTEXUS/Images/SortDirASC.gif"; 605 } 606 cell.Controls.Add(_headImage); 607 } 608 609 } 610 else 611 { 612 LinkButton _headText = new LinkButton(); 613 _headText.Text = Columns[i].HeaderText; 614 cell.Controls.Add(_headText); 615 } 616 617 618 if (Columns[i] is SMQGridViewField) 619 { 620 SMQGridViewField field = Columns[i] as SMQGridViewField; 621 if (field.CanEdit) 622 { 623 if (!IsAllowSaveChange) 624 IsAllowSaveChange = true; 625 626 ImageButton _headEdit = new ImageButton(); 627 _headEdit.CommandName = "EditColumn"; 628 _headEdit.CommandArgument = field.DataField; 629 _headEdit.ToolTip = "Edit this column"; 630 if (field.IsEditing) 631 { 632 _headEdit.ImageUrl = "~/Skin/PROTEXUS/Images/icon_edit.gif"; 633 } 634 else 635 { 636 _headEdit.ImageUrl = "~/Skin/PROTEXUS/Images/icon_edit_f2.gif"; 637 } 638 cell.Controls.Add(_headEdit); 639 } 640 if (field.fieldType == FieldType.Delete) 641 { 642 Image img = new Image(); 643 img.ImageUrl = "~/Skin/PROTEXUS/Images/icon_del.gif"; 644 cell.Controls.Add(img); 645 CheckBox cbx = new CheckBox(); 646 cell.Controls.Add(cbx); 647 } 648 if (cell.Controls.Count == 0) 649 { 650 LiteralControl lbl = new LiteralControl(); 651 lbl.Text = field.HeaderText; 652 cell.Controls.Add(lbl); 653 } 654 } 655 } 656 #endregion 657 break; 658 default: 659 if (this.bHasRecord) 660 { 661 e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml("#F2F2F2"); 662 base.OnRowCreated(e); 663 } 664 665 break; 666 } 667 } 668 public void SetNoRecordRow(GridViewRowEventArgs e) 669 { 670 //if (!this.bHasRecord) 671 //{ 672 // for (int i = 0; i < e.Row.Cells.Count; i++) 673 // { 674 // e.Row.Cells[i].Text = " "; 675 // } 676 //} 677 } 678 679 protected override void OnRowCommand(GridViewCommandEventArgs e) 680 { 681 switch (e.CommandName) 682 { 683 case "Sort": 684 OrderByField = e.CommandArgument.ToString(); 685 OrderByAsc = !OrderByAsc; 686 break; 687 case "Pager": 688 PageIndex = int.Parse(e.CommandArgument.ToString()); 689 break; 690 case "EditColumn": 691 foreach (DataControlField field in Columns) 692 { 693 if (field is SMQGridViewField) 694 { 695 SMQGridViewField fld = field as SMQGridViewField; 696 if (fld.DataField == e.CommandArgument.ToString()) 697 fld.IsEditing = !fld.IsEditing; 698 } 699 } 700 break; 701 case "AllEdit": 702 { 703 foreach (DataControlField field in Columns) 704 { 705 if (field is SMQGridViewField) 706 { 707 SMQGridViewField fld = field as SMQGridViewField; 708 fld.IsEditing = true; 709 } 710 } 711 break; 712 } 713 case "SaveChanges": 714 if (_IsSaveChange) 715 { 716 if (!SaveChanges()) 717 return; 718 } 719 break; 720 } 721 base.OnRowCommand(e); 722 } 723 724 protected override void Render(HtmlTextWriter writer) 725 { 726 this.Style.Add("border-collapse", "separate!important"); 727 writer.Write("<div class=\"proList\"><div class=\"prolistTop fontbold textindent10\">" + GridViewName + "</div>"); 728 base.Render(writer); 729 writer.Write("</div>"); 730 731 ScriptManager.RegisterStartupScript(this, this.GetType(), this.UniqueID, this.SetGVNoRecordScript(), true); 732 733 } 734 735 private bool SaveChanges() 736 { 737 if (string.IsNullOrEmpty(EntityType)) 738 return false; 739 740 #region Validate has smq field. 741 bool hasSMQField = false; 742 foreach (DataControlField field in this.Columns) 743 { 744 if (field is SMQGridViewField) 745 { 746 SMQGridViewField fie = field as SMQGridViewField; 747 if (fie.IsEditing || fie.fieldType == FieldType.Delete) 748 hasSMQField = true; 749 } 750 } 751 if (!hasSMQField) 752 return false; 753 #endregion 754 755 EntityList DeleteList = new EntityList(); 756 EntityList UpdateList = new EntityList(); 757 foreach (GridViewRow row in Rows) 758 { 759 int PrimaryKeyValue = http://www.mamicode.com/int.Parse(DataKeys[row.RowIndex].Value.ToString()); 760 761 Entity entity = System.Activator.CreateInstance(Type.GetType("ProTexus.Model." + EntityType)) as Entity; 762 763 #region Get Table Name 764 PropertyInfo[] properties = entity.GetType().GetProperties(); 765 foreach (BindingClassAttribute attr in entity.GetType().GetCustomAttributes(typeof(BindingClassAttribute), true)) 766 { 767 entity.TableName = attr.TableName; 768 break; 769 } 770 #endregion 771 772 #region Get Original Data 773 string Usp_SQL = "SELECT top 1 * FROM [" + entity.TableName + "] WHERE [" + PrimaryKeyName + "]=" + PrimaryKeyValue.ToString(); 774 ReturnValue _result = entity.getEntity(Usp_SQL); 775 if (!_result.Success) 776 { 777 return false; 778 } 779 entity = _result.Object; 780 #endregion 781 782 #region Set New Data 783 foreach (DataControlFieldCell cell in row.Cells) 784 { 785 if (cell.ContainingField is SMQGridViewField) 786 { 787 788 SMQGridViewField field = cell.ContainingField as SMQGridViewField; 789 790 if (field.fieldType == FieldType.Delete) 791 { 792 CheckBox cbx = cell.Controls[0] as CheckBox; 793 if (cbx.Checked) 794 { 795 entity.GetType().GetProperty(PrimaryKeyName).SetValue(entity, PrimaryKeyValue, null); 796 DeleteList.Add(entity); 797 goto NewRow; 798 } 799 } 800 else 801 { 802 if (field.IsEditing) 803 { 804 if (field.fieldType == FieldType.DateTime) 805 { 806 //DateSelector dsl = cell.Controls[0] as DateSelector; 807 //if (dsl.HasDateTime) 808 //{ 809 // entity.GetType().GetProperty(field.DataField).SetValue(entity, dsl.DateTime, null); 810 //} 811 //else 812 //{ 813 // cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Please provide a datetime</div>")); 814 // return false; 815 //} 816 } 817 if (field.fieldType == FieldType.CheckBox) 818 { 819 CheckBox cbx = cell.Controls[0] as CheckBox; 820 entity.GetType().GetProperty(field.DataField).SetValue(entity, cbx.Checked, null); 821 } 822 if (field.fieldType == FieldType.CheckBoxFeature) 823 { 824 CheckBox cbx = cell.Controls[0] as CheckBox; 825 string statusId = "Status"; 826 entity.GetType().GetProperty(statusId).SetValue(entity, cbx.Checked, null); 827 } 828 829 if (field.fieldType == FieldType.Status) 830 { 831 DropDownList ddl = cell.Controls[0] as DropDownList; 832 string contentStatusName = "ContentStatusId"; 833 if (!string.IsNullOrEmpty(field.ContentStatusName)) 834 { 835 contentStatusName = field.ContentStatusName; 836 } 837 entity.GetType().GetProperty(contentStatusName).SetValue(entity, int.Parse(ddl.SelectedValue), null); 838 } 839 840 if (field.fieldType == FieldType.PPStatus) 841 { 842 DropDownList ddl = cell.Controls[0] as DropDownList; 843 string contentStatusName = "ContentStatusId"; 844 if (!string.IsNullOrEmpty(field.ContentStatusName)) 845 { 846 contentStatusName = field.ContentStatusName; 847 } 848 entity.GetType().GetProperty(contentStatusName).SetValue(entity, int.Parse(ddl.SelectedValue), null); 849 } 850 851 if (field.fieldType == FieldType.Feature) 852 { 853 DropDownList ddl_Feature = cell.Controls[0] as DropDownList; 854 string locationId = "Location"; 855 if (!string.IsNullOrEmpty(field.FeatureLocation)) 856 { 857 locationId = field.FeatureLocation; 858 } 859 entity.GetType().GetProperty(locationId).SetValue(entity, int.Parse(ddl_Feature.SelectedValue), null); 860 } 861 862 if (field.fieldType == FieldType.Int) 863 { 864 TextBox txt = cell.Controls[0] as TextBox; 865 if (SILK2010.Utilities.isInteger(txt.Text)) 866 { 867 entity.GetType().GetProperty(field.DataField).SetValue(entity, int.Parse(txt.Text), null); 868 } 869 else 870 { 871 cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Please provide a integer</div>")); 872 return false; 873 } 874 } 875 876 if (field.fieldType == FieldType.MaxQty) 877 { 878 TextBox txt = cell.Controls[0] as TextBox; 879 880 if (!string.IsNullOrEmpty(txt.Text)) 881 { 882 if (SILK2010.Utilities.IsDouble(txt.Text.Trim())) 883 { 884 //if (int.Parse(txt.Text.Trim()) <= 0) 885 //{ 886 // cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Duration‘s data must larger than 0</div>")); 887 // return false; 888 889 //} 890 //else 891 //{ 892 entity.GetType().GetProperty(field.DataField).SetValue(entity, int.Parse(txt.Text), null); 893 //} 894 } 895 else 896 { 897 cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Please provide a number</div>")); 898 return false; 899 } 900 } 901 else 902 { 903 entity.GetType().GetProperty(field.DataField).SetValue(entity, null, null); 904 905 } 906 907 908 } 909 if (field.fieldType == FieldType.Double) 910 { 911 TextBox txt = cell.Controls[0] as TextBox; 912 if (SILK2010.Utilities.IsDouble(txt.Text)) 913 { 914 entity.GetType().GetProperty(field.DataField).SetValue(entity, double.Parse(txt.Text), null); 915 } 916 else 917 { 918 cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Please provide a number</div>")); 919 return false; 920 } 921 } 922 if (field.fieldType == FieldType.TextBox || field.fieldType == FieldType.LinkButton) 923 { 924 TextBox txt = cell.Controls[0] as TextBox; 925 entity.GetType().GetProperty(field.DataField).SetValue(entity, txt.Text, null); 926 } 927 if (field.fieldType == FieldType.Duration) 928 { 929 TextBox txt_Duration = cell.Controls[0] as TextBox; 930 DropDownList ddl_TimeType = cell.Controls[1] as DropDownList; 931 932 if (!string.IsNullOrEmpty(txt_Duration.Text)) 933 { 934 if (SILK2010.Utilities.IsDouble(txt_Duration.Text.Trim())) 935 { 936 //if (double.Parse(txt_Duration.Text.Trim()) <= 0) 937 //{ 938 // cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Duration‘s data must larger than 0</div>")); 939 // return false; 940 //} 941 //else 942 //{ 943 if (ddl_TimeType.SelectedValue =http://www.mamicode.com/= "Order") 944 { 945 entity.GetType().GetProperty("Duration").SetValue(entity, double.Parse("1"), null); 946 entity.GetType().GetProperty("TimeType").SetValue(entity, ddl_TimeType.SelectedValue, null); 947 948 } 949 else 950 { 951 952 entity.GetType().GetProperty("Duration").SetValue(entity, double.Parse(txt_Duration.Text.Trim()), null); 953 entity.GetType().GetProperty("TimeType").SetValue(entity, ddl_TimeType.SelectedValue, null); 954 } 955 //} 956 957 } 958 else 959 { 960 961 cell.Controls.Add(new LiteralControl("<div class=\"MessageSummary\">Please provide a number for Duration field</div>")); 962 return false; 963 964 } 965 } 966 else 967 { 968 if (ddl_TimeType.SelectedValue =http://www.mamicode.com/= "Order") 969 { 970 entity.GetType().GetProperty("Duration").SetValue(entity, double.Parse("1"), null); 971 entity.GetType().GetProperty("TimeType").SetValue(entity, ddl_TimeType.SelectedValue, null); 972 973 } 974 else 975 { 976 entity.GetType().GetProperty("Duration").SetValue(entity, null, null); 977 entity.GetType().GetProperty("TimeType").SetValue(entity, null, null); 978 } 979 980 } 981 982 } 983 } 984 } 985 } 986 } 987 988 989 UpdateList.Add(entity); 990 991 992 //UpdateList.Add(entity); 993 994 NewRow: 995 continue; 996 997 #endregion 998 999 }1000 1001 #region Save New Data1002 1003 Entity entityForTrans = System.Activator.CreateInstance(Type.GetType("ZstoreAdmin.Model." + EntityType)) as Entity;1004 1005 Transaction trans = new Transaction(entityForTrans.DataConnectProviders);1006 1007 ReturnValue result = new ReturnValue();1008 1009 foreach (Entity entity in DeleteList)1010 {1011 result = entity.Delete(trans);1012 if (!result.Success)1013 {1014 if (trans.InTransaction)1015 trans.RollbackTransaction();1016 return false;1017 }1018 }1019 1020 1021 1022 foreach (Entity entity in UpdateList)1023 {1024 result = entity.Update(trans);1025 if (!result.Success)1026 {1027 if (trans.InTransaction)1028 trans.RollbackTransaction();1029 return false;1030 }1031 }1032 1033 1034 trans.CommitTransaction();1035 1036 #endregion1037 1038 #region Restore Grid State1039 1040 foreach (DataControlField field in this.Columns)1041 {1042 if (field is SMQGridViewField)1043 {1044 ((SMQGridViewField)field).IsEditing = false;1045 }1046 }1047 1048 #endregion1049 1050 return true;1051 }1052 1053 public bool SaveChangesAfterValidation()1054 {1055 return this.SaveChanges();1056 }1057 1058 private string SetGVNoRecordScript()1059 {1060 1061 if (this.bHasRecord)1062 {1063 return "";1064 }1065 1066 1067 StringBuilder sb = new StringBuilder();1068 1069 sb.Append("\r\n function SetGVNoRecord" + this.ClientID + "(){");1070 sb.Append("\r\n var gv = document.getElementById(‘" + this.ClientID + "‘);");1071 sb.Append("\r\n if(gv == null){ return;}");1072 sb.Append("\r\n var rowCount = gv.rows.length;");1073 sb.Append("\r\n for(var i = rowCount - 1 ; i > 0;i--){");1074 sb.Append("\r\n if(i == 1){");1075 sb.Append("\r\n for(var j =0 ; j < gv.rows[i].cells.length;j++){");1076 sb.Append("\r\n gv.rows[i].cells[j].innerHTML=‘ ‘;");1077 sb.Append("\r\n }");1078 sb.Append("\r\n }");1079 sb.Append("\r\n else {");1080 sb.Append("\r\n gv.deleteRow(i);");1081 sb.Append("\r\n }");1082 sb.Append("\r\n }");1083 sb.Append("\r\n }");1084 sb.Append("\r\n SetGVNoRecord" + this.ClientID + "();");1085 1086 return sb.ToString();1087 }1088 }1089 }
using System;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;using System.Collections;using System.Collections.Generic;using System.Text;using System.Web.UI.Design;using System.ComponentModel;using SILK2010;namespace FrameWorkV4.Controls{ public class SMQGridViewField : BoundField { public bool CanEdit; public bool IsEditing { get { object o = ViewState["IsEditing"]; if (o == null) { return false; } return (bool)o; } set { ViewState["IsEditing"] = value; } } public FieldType fieldType; public string ContentStatusName; public string FeatureLocation; public string StatusName; public SMQGridViewField() { } protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState) { base.InitializeDataCell(cell, rowState); if (IsEditing) { switch (fieldType) { case FieldType.DateTime: //DateSelector dsl = new DateSelector(); //cell.Controls.Add(dsl); break; case FieldType.Status: DropDownList ddl = new DropDownList(); ddl.Items.Add(new ListItem("Active", "1")); ddl.Items.Add(new ListItem("Pending", "2")); ddl.Items.Add(new ListItem("Inactive", "3")); ddl.Attributes.Add("onchange", "TableViewer_Mark_Field_Altered(this);"); ddl.Attributes.Add("onfocus", "TableViewer_Set_Field_Defaults(this)"); cell.Controls.Add(ddl); break; case FieldType.Feature: DropDownList ddl_Feature = new DropDownList(); ddl_Feature.Items.Add(new ListItem("Top", "1")); ddl_Feature.Items.Add(new ListItem("Bottom", "2")); ddl_Feature.Attributes.Add("onchange", "TableViewer_Mark_Field_Altered(this);"); ddl_Feature.Attributes.Add("onfocus", "TableViewer_Set_Field_Defaults(this)"); cell.Controls.Add(ddl_Feature); break; case FieldType.CheckBox: CheckBox cbx = new CheckBox(); cbx.Attributes.Add("onclick", "TableViewer_Mark_Field_Altered(this);"); cbx.Attributes.Add("onfocus", "TableViewer_Set_Field_Defaults(this)"); cell.Controls.Add(cbx); break; case FieldType.CheckBoxFeature: CheckBox cbxfeature = new CheckBox(); cbxfeature.Attributes.Add("onclick", "TableViewer_Mark_Field_Altered(this);"); cbxfeature.Attributes.Add("onfocus", "TableViewer_Set_Field_Defaults(this)"); cell.Controls.Add(cbxfeature); break; case FieldType.MaxQty: TextBox txtMaxQty = new TextBox(); txtMaxQty.Width = new Unit("40%"); txtMaxQty.Attributes.Add("onkeyup", "TableViewer_Mark_Field_Altered(this);"); txtMaxQty.Attributes.Add("onfocus", "TableViewer_Set_Field_Defaults(this)"); cell.Controls.Add(txtMaxQty); break; case FieldType.Duration: TextBox txtDuration = new TextBox(); txtDuration.Width = new Unit("40%"); txtDuration.Attributes.Add("onkeyup", "TableViewer_Mark_Field_Altered(this);"); txtDuration.Attributes.Add("onfocus", "TableViewer_Set_Field_Defaults(this)"); cell.Controls.Add(txtDuration); DropDownList ddl_TimeType = new DropDownList(); ddl_TimeType.Items.Insert(0, new ListItem("Seconds", "Seconds")); ddl_TimeType.Items.Insert(1, new ListItem("Minutes", "Minutes")); ddl_TimeType.Items.Insert(2, new ListItem("Hours", "Hours")); ddl_TimeType.Items.Insert(3, new ListItem("Days", "Days")); ddl_TimeType.Items.Insert(4, new ListItem("Months", "Months")); ddl_TimeType.Items.Insert(5, new ListItem("Years", "Years")); ddl_TimeType.Items.Insert(6, new ListItem("Lifetime", "Lifetime")); ddl_TimeType.Items.Insert(7, new ListItem("Order", "Order")); ddl_TimeType.Attributes.Add("onchange", "TableViewer_Mark_Field_Altered(this);"); ddl_TimeType.Attributes.Add("onfocus", "TableViewer_Set_Field_Defaults(this)"); cell.Controls.Add(ddl_TimeType); break; case FieldType.PPStatus: DropDownList ddl_ppstatus = new DropDownList(); ddl_ppstatus.Items.Add(new ListItem("Active", "1")); ddl_ppstatus.Items.Add(new ListItem("Pending", "2")); ddl_ppstatus.Items.Add(new ListItem("Inactive", "3")); ddl_ppstatus.Attributes.Add("onchange", "TableViewer_Mark_Field_Altered(this);"); ddl_ppstatus.Attributes.Add("onfocus", "TableViewer_Set_Field_Defaults(this)"); cell.Controls.Add(ddl_ppstatus); break; default: TextBox txt = new TextBox(); txt.Width = new Unit("90%"); txt.Attributes.Add("onkeyup", "TableViewer_Mark_Field_Altered(this);"); txt.Attributes.Add("onfocus", "TableViewer_Set_Field_Defaults(this)"); cell.Controls.Add(txt); break; } } else if (fieldType == FieldType.LinkButton) { LinkButton lbt = new LinkButton(); lbt.CommandName = "Sel"; cell.Controls.Add(lbt); } else if (fieldType == FieldType.Delete) { this.IsEditing = false; CheckBox cbx = new CheckBox(); cbx.Attributes.Add("onclick", "if (this.checked) this.parentNode.style.backgroundColor = ‘Red‘; else this.parentNode.style.backgroundColor = ‘‘;"); cell.Controls.Add(cbx); } } protected override void OnDataBindField(object sender, EventArgs e) { Control control = (Control)sender; GridViewRow row = control.NamingContainer as GridViewRow; object dataValue = http://www.mamicode.com/this.GetValue(control.NamingContainer); if (fieldType == FieldType.Status) { if (dataValue != null) { switch (dataValue.ToString().ToUpper()) { case "ACTIVE": row.BackColor = System.Drawing.ColorTranslator.FromHtml("#F2F2F2"); break; case "PENDING": row.BackColor = System.Drawing.ColorTranslator.FromHtml("#FCD5E5"); row.Font.Italic = true; break; case "INACTIVE": row.BackColor = System.Drawing.ColorTranslator.FromHtml("#FFF3CE"); break; } } } if (IsEditing) { if (this.fieldType == FieldType.DateTime) { //if (dataValue != null) //{ // if (dataValue.GetType().Name == "DateTime") // { // ((DateSelector)control.Controls[0]).DateTime = (DateTime)dataValue; // } // else // { // try // { // ((DateSelector)control.Controls[0]).DateTime = DateTime.Parse(dataValue.ToString()); // } // catch // { } // } //} } if (this.fieldType == FieldType.TextBox) { if (dataValue != null) ((TextBox)control.Controls[0]).Text = dataValue.ToString(); } if (this.fieldType == FieldType.LinkButton) { if (dataValue != null) ((TextBox)control.Controls[0]).Text = dataValue.ToString(); } if (this.fieldType == FieldType.CheckBox) { if (dataValue != null) ((CheckBox)control.Controls[0]).Checked = (bool)dataValue; } if (this.fieldType == FieldType.Int) { if (dataValue != null) ((TextBox)control.Controls[0]).Text = dataValue.ToString(); } if (this.fieldType == FieldType.MaxQty) { if (dataValue != null) ((TextBox)control.Controls[0]).Text = dataValue.ToString(); } if (this.fieldType == FieldType.Double) { if (dataValue != null) ((TextBox)control.Controls[0]).Text = dataValue.ToString(); } if (this.fieldType == FieldType.Status) { if (dataValue != null) { switch (dataValue.ToString().ToUpper()) { case "ACTIVE": ((DropDownList)control.Controls[0]).SelectedValue = http://www.mamicode.com/"1"; break; case "PENDING": ((DropDownList)control.Controls[0]).SelectedValue = http://www.mamicode.com/"2"; break; case "INACTIVE": ((DropDownList)control.Controls[0]).SelectedValue = http://www.mamicode.com/"3"; break; } } } if (this.fieldType == FieldType.PPStatus) { if (dataValue != null) { switch (dataValue.ToString().ToUpper()) { case "ACTIVE": ((DropDownList)control.Controls[0]).SelectedValue = http://www.mamicode.com/"1"; break; case "PENDING": ((DropDownList)control.Controls[0]).SelectedValue = http://www.mamicode.com/"2"; break; case "INACTIVE": ((DropDownList)control.Controls[0]).SelectedValue = http://www.mamicode.com/"3"; break; } } } if (this.fieldType == FieldType.Duration) { if (dataValue != null) { string[] _info = dataValue.ToString().Split(‘ ‘); if (_info.Length == 2) { if (!string.IsNullOrEmpty(_info[0].ToString())) { ((TextBox)control.Controls[0]).Text = _info[0].ToString(); } if (!string.IsNullOrEmpty(_info[1].ToString())) { ((DropDownList)control.Controls[1]).SelectedValue = http://www.mamicode.com/_info[1].ToString(); } } } } } else if (control.Controls.Count > 0 && this.fieldType == FieldType.LinkButton) { if (dataValue != null) { ((LinkButton)control.Controls[0]).Text = dataValue.ToString(); ((LinkButton)control.Controls[0]).CommandArgument = ((GridViewRow)control.Parent).RowIndex.ToString(); } } else { base.OnDataBindField(sender, e); } } } public enum FieldType { TextBox, CheckBox, Status, LinkButton, Delete, DateTime, Int, Double, Feature, CheckBoxFeature, Duration, MaxQty, PPStatus, }}
ASP.net 自定义控件GridView
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。