public static void LazyLoad <T>(VirtualGridData <T> d) where T : new() { Task.Factory.StartNew(() => { using (BLL.GeneralBll bll = new BLL.GeneralBll()) { lock (obj) { int endIndex = Math.Min(d.LoadedCount + d.PerLoadSize, d.Data.Count); var lazyData = bll.Select <T>(d.Grid.SortDescriptors.Expression, d.Grid.FilterDescriptors.Expression, d.LoadedCount + 1, endIndex);//bll.Read().OrderByDescending(x => x.ID).Skip(this.loadedRowCount).Take(endIndex - this.loadedRowCount).ToList(); for (int i = d.LoadedCount; i < endIndex; i++) { d.Data[i] = lazyData[i - d.LoadedCount]; } d.LoadedCount = endIndex; } } }).ContinueWith(t => { syncContext.Post((state) => { //dynamic da = state; //var grid = da.Grid as RadVirtualGrid; var grid = d.Grid; if (grid.IsDisposed) { return; } int waitingRow = grid.RowCount - 1; grid.RowCount = Math.Min(d.LoadedCount + 1, d.Data.Count); grid.MasterViewInfo.StopRowWaiting(waitingRow); }, d); }); }
private static SynchronizationContext syncContext = SynchronizationContext.Current; //线程中更新UI模型传播上下文 /// <summary> /// 设置virtualgrid 数据 并设置 CellValueNeeded /// </summary> /// <typeparam name="T"></typeparam> /// <param name="d"></param> /// <param name="syncContext"></param> public static void InitalLoad <T>(VirtualGridData <T> d) where T : new() { var grid = d.Grid; grid.RowCount = 0; grid.ColumnCount = ModelHelper.GetColumnDisplayNames(typeof(T)).Count(); ////设置Column宽度 //grid.TableElement.ColumnsViewState.SetItemSize(0,30); //grid.ColumnWidthChanging += (s, e) => { // //ID列为命令按钮,固定大小,不允许resize // int idIndex = Array.IndexOf(ModelHelper.GetColumnNames(typeof(T)), "ID"); // if (e.ColumnIndex==idIndex) // { // e.Cancel = true; // } //}; //grid.CreateCellElement += (s, e) => { // //ID列约定为命令按钮 // int idIndex = Array.IndexOf(ModelHelper.GetColumnNames(typeof(T)), "ID"); // if (e.RowIndex>=0 && e.ColumnIndex == idIndex) // { // e.CellElement = new Helpers.VirtualGridEditCommandCellElement(); // } //}; //grid.CellFormatting += (s, e) => { // //ID列约定为命令按钮 // int idIndex = Array.IndexOf(ModelHelper.GetColumnNames(typeof(T)), "ID"); // if (e.CellElement.RowIndex == -3 && e.CellElement.ColumnIndex == idIndex) // { // e.CellElement.Visibility = Telerik.WinControls.ElementVisibility.Hidden; // } // if (e.CellElement.RowIndex == -1 && e.CellElement.ColumnIndex == idIndex) // { // e.CellElement.Visibility= Telerik.WinControls.ElementVisibility.Hidden; // } //}; grid.CellValueNeeded += (s, e) => { if (e.ColumnIndex < 0 || d.Data == null) //|| data == null { return; } if (e.RowIndex == RadVirtualGrid.HeaderRowIndex) { e.Value = Helpers.ModelHelper.GetColumnDisplayNames(typeof(T))[e.ColumnIndex]; } if (e.RowIndex < 0) { e.FieldName = ModelHelper.GetColumnNames(typeof(T))[e.ColumnIndex]; } if (e.RowIndex == e.ViewInfo.RowCount - 1 && e.ViewInfo.RowCount < d.Data.Count) { e.Value = null; e.ViewInfo.StartRowWaiting(e.RowIndex); LazyLoad <T>(d); //if (!this.lazyLoader.IsBusy) //{ // this.lazyLoader.RunWorkerAsync(); //} } else if (e.RowIndex >= 0) { e.Value = ModelHelper.GetValueByPropertyName <T>(d.Data[e.RowIndex], ModelHelper.GetColumnNames(typeof(T))[e.ColumnIndex]); } }; if (!grid.MasterViewInfo.IsWaiting) { grid.MasterViewInfo.IsWaiting = true; } Task.Factory.StartNew(() => { using (BLL.GeneralBll bll = new BLL.GeneralBll()) { lock (obj) { var count = bll.CountTable <T>(grid.FilterDescriptors.Expression); d.Data = new List <T>(count); for (int i = 0; i < count; i++) { d.Data.Add(new T()); } var initData = bll.Select <T>(grid.SortDescriptors.Expression, grid.FilterDescriptors.Expression, 1, d.PerLoadSize); d.LoadedCount = initData == null? 0: initData.Count(); if (initData != null) { for (int i = 0; i < initData.Count; i++) { d.Data[i] = initData[i]; } } } } }).ContinueWith(t => { syncContext.Post((state) => { //dynamic d = state; //var grid = da.Grid as RadVirtualGrid; if (grid.IsDisposed) { return; } if (!t.IsFaulted) { grid.RowCount = Math.Min(d.LoadedCount + 1, d.Data.Count); } if (grid.MasterViewInfo.IsWaiting) { grid.MasterViewInfo.IsWaiting = false; } }, d); }); }
public AppUserAddEditForm() { InitializeComponent(); this.AcceptButton = this.btnOk; this.CancelButton = this.btnCancel; this.FormClosed += (s, e) => { //释放 资源 if (bll != null) { bll.Dispose(); bll = null; } }; //设置dataentity this.deMain.FitToParentWidth = true; this.deMain.ShowValidationPanel = true; this.deMain.EditorInitializing += (s, e) => { e.Editor.Name = e.Property.Name; if (e.Property.Name == "UserName" && EditMode == Enums.EditFormMode.Edit) { e.Editor.Enabled = false; } else if (e.Property.Name == "Email") { RadMaskedEditBox editor = new RadMaskedEditBox(); editor.MaskType = MaskType.EMail; editor.MaskedEditBoxElement.StretchVertically = true; e.Editor = editor; } //else if (e.Property.Name == "Tel") //{ // RadMaskedEditBox editor = new RadMaskedEditBox(); // editor.MaskType = MaskType.Regex; // editor.MaskedEditBoxElement.StretchVertically = true; // //editor.Mask = "9"; // e.Editor = editor; //} }; this.deMain.ItemValidating += (s, e) => { Models.AppUser user = this.deMain.CurrentObject as Models.AppUser; switch (e.Label.Text) { case "用户名": if (string.IsNullOrWhiteSpace(user.UserName)) { string errorMessage = "用户名不能为空!"; e.ErrorProvider.SetError(s as Control, errorMessage); e.Cancel = true; AddErrorLabel(this.deMain, e.Label.Text, errorMessage); } else { e.ErrorProvider.Clear(); this.deMain.ValidationPanel.PanelContainer.Controls.RemoveByKey(e.Label.Text); } break; default: break; } }; this.Shown += (s, e) => { //设置窗体title switch (EditMode) { case Enums.EditFormMode.Add: this.Text = "新增"; DataEntry = new Models.AppUser() { Password = Helpers.EncryptDecryptHelper.GetStringMD5("888888") }; //新增用户默认密码 break; case Enums.EditFormMode.Edit: this.Text = "编辑"; break; case Enums.EditFormMode.Delete: this.Text = "删除"; break; default: this.Text = "新增/编辑"; break; } if (DataEntry != null) { this.deMain.DataSource = this.DataEntry; } }; this.btnCancel.Click += (s, e) => { //this.UserRole.CancelEdit(); this.DialogResult = DialogResult.Cancel; }; this.btnOk.Click += (s, e) => { var t = ValidationHelper.hasValidationErrors(this.deMain.Controls); if (t) { return; } this.btnOk.Enabled = false; Task.Factory.StartNew <AppUser>(() => { Models.AppUser re = null; if (EditMode == Enums.EditFormMode.Add) { re = bll.Insert <Models.AppUser>(this.DataEntry); } else if (EditMode == Enums.EditFormMode.Edit) { re = bll.Update <Models.AppUser>(this.DataEntry); } return(re); }).ContinueWith(tt => { if (!tt.IsFaulted) { syncContext.Post((state) => { Models.AppUser sta = (Models.AppUser)state; if (sta != null) { this.DataEntry = sta; this.DialogResult = DialogResult.OK; //this.SubmitSucess = true; } else { RadMessageBox.Show(this, "保存失败!", "", MessageBoxButtons.OK, RadMessageIcon.Error); } }, tt.Result); } syncContext.Post((state) => { this.btnOk.Enabled = true; }, tt.Result); }); }; }
public UserRolesAddEditForm() { InitializeComponent(); this.AcceptButton = this.btnSubmit; this.CancelButton = this.btnCanel; this.FormClosed += (s, e) => { //释放 资源 if (bll != null) { bll.Dispose(); bll = null; } }; //设置dataentity this.deUserRole.FitToParentWidth = true; this.deUserRole.ShowValidationPanel = true; this.deUserRole.EditorInitializing += (s, e) => { e.Editor.Name = e.Property.Name; }; this.deUserRole.ItemValidating += (s, e) => { Models.AppRole role = this.deUserRole.CurrentObject as Models.AppRole; switch (e.Label.Text) { case "角色名称": if (string.IsNullOrWhiteSpace(role.RoleName)) { string errorMessage = "角色名称不能为空!"; e.ErrorProvider.SetError(s as Control, errorMessage); e.Cancel = true; AddErrorLabel(this.deUserRole, e.Label.Text, errorMessage); } else { e.ErrorProvider.Clear(); this.deUserRole.ValidationPanel.PanelContainer.Controls.RemoveByKey(e.Label.Text); } break; default: break; } }; this.Shown += (s, e) => { //设置窗体title switch (EditMode) { case Enums.EditFormMode.Add: this.Text = "新增"; UserRole = new Models.AppRole(); break; case Enums.EditFormMode.Edit: this.Text = "编辑"; break; case Enums.EditFormMode.Delete: this.Text = "删除"; break; default: this.Text = "新增/编辑"; break; } if (UserRole != null) { this.deUserRole.DataSource = this.UserRole; this.UserRole.BeginEdit(); } }; this.btnCanel.Click += (s, e) => { //this.UserRole.CancelEdit(); this.DialogResult = DialogResult.Cancel; }; this.btnSubmit.Click += (s, e) => { var t = ValidationHelper.hasValidationErrors(this.deUserRole.Controls); if (t) { return; } this.btnSubmit.Enabled = false; Task.Factory.StartNew(() => { Models.AppRole re = null; if (EditMode == Enums.EditFormMode.Add) { re = bll.Insert <Models.AppRole>(this.UserRole); } else if (EditMode == Enums.EditFormMode.Edit) { re = bll.Update <Models.AppRole>(this.UserRole); } syncContext.Post((state) => { this.btnSubmit.Enabled = true; Models.AppRole sta = (Models.AppRole)state; if (sta != null) { this.UserRole = sta; this.DialogResult = DialogResult.OK; //this.SubmitSucess = true; } else { RadMessageBox.Show(this, "保存失败!", "", MessageBoxButtons.OK, RadMessageIcon.Error); } }, re); }); }; }
public AppUserForm() { InitializeComponent(); this.Text = "用户管理"; //窗体关闭时dispose this.FormClosed += (s, e) => { if (bll != null) { bll.Dispose(); bll = null; } }; data = new Helpers.VirtualGridData <Models.AppUser> { Grid = this.vgMainGrid, LoadedCount = 0, PerLoadSize = 100 }; this.vgMainGrid.AutoSizeColumnsMode = VirtualGridAutoSizeColumnsMode.Fill;// this.vgMainGrid.EnableAlternatingRowColor = true; this.vgMainGrid.Selection.Multiselect = false; this.vgMainGrid.SelectionMode = VirtualGridSelectionMode.FullRowSelect; this.vgMainGrid.AllowAddNewRow = false; this.vgMainGrid.AllowEdit = false; this.vgMainGrid.FilterChanged += (s, e) => { Helpers.VirtualGridDataHelper.InitalLoad <Models.AppUser>(data); }; this.vgMainGrid.SortChanged += (s, e) => { Helpers.VirtualGridDataHelper.InitalLoad <Models.AppUser>(data); }; //表格删除时 this.vgMainGrid.UserDeletedRow += (s, e) => { DeleteEntry(); }; //双击编辑 this.vgMainGrid.CellDoubleClick += (s, e) => { var cell = this.vgMainGrid.CurrentCell; if (cell == null) { return; } if (cell.RowIndex < 0) { return; } var current = data.Data[cell.RowIndex]; AppUserAddEditForm form = new AppUserAddEditForm(); form.EditMode = Enums.EditFormMode.Edit; form.DataEntry = current; var dr = form.ShowDialog(this); if (dr == DialogResult.OK) { this.vgMainGrid.BeginUpdate(); data.Data[cell.RowIndex] = form.DataEntry; this.vgMainGrid.EndUpdate(); this.vgMainGrid.SelectCell(cell.RowIndex, cell.ColumnIndex); } }; //重置密码 this.btnResetPassword.Click += (s, e) => { var cell = this.vgMainGrid.CurrentCell; if (cell == null) { RadMessageBox.Show(this, "请选择一行!", "", MessageBoxButtons.OK, RadMessageIcon.Error); return; } if (cell.RowIndex < 0) { return; } var current = data.Data[cell.RowIndex]; var dr = RadMessageBox.Show(this, "密码将被重置为 888888,是否继续?", "", MessageBoxButtons.YesNo, RadMessageIcon.Question); if (dr == DialogResult.Yes) { int re = bll.Update <Models.AppUser>(current.Id, "Password", Helpers.EncryptDecryptHelper.GetStringMD5("888888")); if (re > 0) { RadMessageBox.Show(this, "密码已重置为 888888,请及时更改!", "", MessageBoxButtons.OK, RadMessageIcon.Info); } else { RadMessageBox.Show(this, "重置失败!", "", MessageBoxButtons.OK, RadMessageIcon.Error); } } }; //按钮编辑 this.btnEdit.Click += (s, e) => { var cell = this.vgMainGrid.CurrentCell; if (cell == null) { RadMessageBox.Show(this, "请选择一行!", "", MessageBoxButtons.OK, RadMessageIcon.Error); return; } if (cell.RowIndex < 0) { return; } var current = data.Data[cell.RowIndex]; AppUserAddEditForm form = new AppUserAddEditForm(); form.EditMode = Enums.EditFormMode.Edit; form.DataEntry = current; var dr = form.ShowDialog(this); //form.FormClosed += (ss, ee) => { Helpers.VirtualGridDataHelper.InitalLoad<Models.UserRole>(data, syncContext); }; if (dr == DialogResult.OK) { this.vgMainGrid.BeginUpdate(); data.Data[cell.RowIndex] = form.DataEntry; this.vgMainGrid.EndUpdate(); this.vgMainGrid.SelectCell(cell.RowIndex, cell.ColumnIndex); } }; this.btnReLoad.Click += (s, e) => { Helpers.VirtualGridDataHelper.InitalLoad <Models.AppUser>(data); }; this.btnAdd.Click += (s, e) => { AppUserAddEditForm form = new AppUserAddEditForm(); //form.StartPosition = FormStartPosition.WindowsDefaultLocation; form.EditMode = Enums.EditFormMode.Add; var dr = form.ShowDialog(this); if (dr == DialogResult.OK) { this.vgMainGrid.BeginUpdate(); this.data.Data.Insert(0, form.DataEntry); this.vgMainGrid.RowCount++; this.vgMainGrid.EndUpdate(); this.vgMainGrid.SelectCell(0, 0); } }; this.btnDelete.Click += (s, e) => { DeleteEntry(); }; Helpers.VirtualGridDataHelper.InitalLoad <Models.AppUser>(data); }
private void InitForm() { //窗体关闭时dispose this.FormClosed += (s, e) => { if (bll != null) { bll.Dispose(); bll = null; } }; data = new Helpers.VirtualGridData <Models.AppRole> { Grid = this.vgUserRoles, LoadedCount = 0, PerLoadSize = 100 }; this.Text = "角色管理"; this.vgUserRoles.AutoSizeColumnsMode = VirtualGridAutoSizeColumnsMode.Fill;// this.vgUserRoles.EnableAlternatingRowColor = true; this.vgUserRoles.Selection.Multiselect = false; this.vgUserRoles.SelectionMode = VirtualGridSelectionMode.FullRowSelect; this.vgUserRoles.AllowAddNewRow = false; //this.vgUserRoles.AllowDelete = false; this.vgUserRoles.AllowEdit = false; this.vgUserRoles.FilterChanged += (s, e) => { Helpers.VirtualGridDataHelper.InitalLoad <Models.AppRole>(data); }; this.vgUserRoles.SortChanged += (s, e) => { Helpers.VirtualGridDataHelper.InitalLoad <Models.AppRole>(data); }; //表格删除时 this.vgUserRoles.UserDeletedRow += (s, e) => { DeleteEntry(); }; //双击编辑 this.vgUserRoles.CellDoubleClick += (s, e) => { var cell = this.vgUserRoles.CurrentCell; if (cell == null) { return; } if (cell.RowIndex < 0) { return; } var current = data.Data[cell.RowIndex]; UserRolesAddEditForm form = new UserRolesAddEditForm(); form.EditMode = Enums.EditFormMode.Edit; form.UserRole = current; var dr = form.ShowDialog(this); if (dr == DialogResult.OK) { this.vgUserRoles.BeginUpdate(); data.Data[cell.RowIndex] = form.UserRole; this.vgUserRoles.EndUpdate(); this.vgUserRoles.SelectCell(cell.RowIndex, cell.ColumnIndex); } }; //按钮编辑 this.btnEdit.Click += (s, e) => { var cell = this.vgUserRoles.CurrentCell; if (cell == null) { RadMessageBox.Show(this, "请选择一行!", "", MessageBoxButtons.OK, RadMessageIcon.Error); return; } if (cell.RowIndex < 0) { return; } var current = data.Data[cell.RowIndex]; UserRolesAddEditForm form = new UserRolesAddEditForm(); form.EditMode = Enums.EditFormMode.Edit; form.UserRole = current; var dr = form.ShowDialog(this); //form.FormClosed += (ss, ee) => { Helpers.VirtualGridDataHelper.InitalLoad<Models.UserRole>(data, syncContext); }; if (dr == DialogResult.OK) { this.vgUserRoles.BeginUpdate(); data.Data[cell.RowIndex] = form.UserRole; this.vgUserRoles.EndUpdate(); this.vgUserRoles.SelectCell(cell.RowIndex, cell.ColumnIndex); } }; this.btnReLoad.Click += (s, e) => { Helpers.VirtualGridDataHelper.InitalLoad <Models.AppRole>(data); }; this.btnAdd.Click += (s, e) => { UserRolesAddEditForm form = new UserRolesAddEditForm(); //form.StartPosition = FormStartPosition.WindowsDefaultLocation; form.EditMode = Enums.EditFormMode.Add; var dr = form.ShowDialog(this); if (dr == DialogResult.OK) { this.vgUserRoles.BeginUpdate(); this.data.Data.Insert(0, form.UserRole); this.vgUserRoles.RowCount++; this.vgUserRoles.EndUpdate(); this.vgUserRoles.SelectCell(0, 0); } }; this.btnDelete.Click += (s, e) => { DeleteEntry(); }; Helpers.VirtualGridDataHelper.InitalLoad <Models.AppRole>(data); //设置Column宽度 命令列,使用ID列做为命令列 //this.vgUserRoles.TableElement.ColumnsViewState.SetItemSize(0, 30); //this.vgUserRoles.ColumnWidthChanging += (s, e) => { // //ID列为命令按钮,固定大小,不允许resize // int idIndex = Array.IndexOf(ModelHelper.GetColumnNames(typeof(UserRole)), "ID"); // if (e.ColumnIndex == idIndex) // { // e.Cancel = true; // } //}; //this.vgUserRoles.CreateCellElement += (s, e) => { // //ID列约定为命令按钮 // int idIndex = Array.IndexOf(ModelHelper.GetColumnNames(typeof(UserRole)), "ID"); // if (e.RowIndex >= 0 && e.ColumnIndex == idIndex) // { // var cmd = new Helpers.VirtualGridEditCommandCellElement(); // cmd.EditButtonClicked += (ss, ee) => { // var id = (int)cmd.Value; // var entity = data.Data.FirstOrDefault(x => x.ID == id); // if (entity!=null) // { // UserRolesAddEditForm form = new UserRolesAddEditForm(); // form.EditMode = Enums.EditFormMode.Edit; // form.UserRole = entity; // var dr = form.ShowDialog(this); // if (dr == DialogResult.OK) // { // Helpers.VirtualGridDataHelper.InitalLoad<Models.UserRole>(data, System.Threading.SynchronizationContext.Current); // } // } // }; // cmd.DeleteButtonClicked += (ss, ee) => { }; // e.CellElement = cmd; // } //}; //this.vgUserRoles.CellFormatting += (s, e) => { // //ID列约定为命令按钮 // int idIndex = Array.IndexOf(ModelHelper.GetColumnNames(typeof(UserRole)), "ID"); // if (e.CellElement.RowIndex == -3 && e.CellElement.ColumnIndex == idIndex) // { // e.CellElement.Visibility = Telerik.WinControls.ElementVisibility.Hidden; // } // if (e.CellElement.RowIndex == -1 && e.CellElement.ColumnIndex == idIndex) // { // e.CellElement.Visibility = Telerik.WinControls.ElementVisibility.Hidden; // } //}; }