using CloudBuilder; using CloudBuilder.Core.DependencyInjection.Form; using CloudBuilder.Core.Service; using CloudBuilder.Core.Utility; using CloudBuilder.Gui; using CloudBuilder.Gui.DependencyInjection; using CloudBuilder.Request.Security; using CloudBuilder.Security; using CloudBuilder.Security.Entity; using CloudBuilder.Security.SearchCriteria; using CloudBuilder.Util; using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; using System.ComponentModel; using System.Data; using System.Linq; using System.Reflection; using System.Windows.Forms; namespace Krypton.Toolkit { public static class KryptonDataGridViewExtensions { public static void Set(this KryptonDataGridView kryptonDataGridView, BindingContextCustomAttribute bindingContext) { GetProvider().SetCustomAttribute(kryptonDataGridView, bindingContext); } public static void Set(this KryptonDataGridView kryptonDataGridView, List dataSource, DataTable dataTableSource, DataTable deleteDataTableSource ) { GetProvider().SetCustomAttribute(kryptonDataGridView, dataSource, dataTableSource, deleteDataTableSource); } #region 数据操作 public static void DataSourceSorted(this KryptonDataGridView kryptonDataGridView, DataGridViewColumn cloumn, string columnName, ListSortDirection sortDirection) { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; if (dataTableSource == null || dataTableSource.Columns.Count == 0) return; dataTableSource.DefaultView.Sort = columnName; kryptonDataGridView.Sort(cloumn, sortDirection); } public static void SetDataSource(this KryptonDataGridView kryptonDataGridView, List ds) { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; DataTable deleteDataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DeleteDataTableSource; if (ds == null) { kryptonDataGridView.DataSource = null; kryptonDataGridView.Refresh(); dataTableSource = new DataTable(); deleteDataTableSource = new DataTable(); Set(kryptonDataGridView, null!, dataTableSource, deleteDataTableSource); return; } else { } dataTableSource = DataTableConvertor.ToDataTable(ds); kryptonDataGridView.DataSource = dataTableSource; kryptonDataGridView.Refresh(); dataTableSource.AcceptChanges(); deleteDataTableSource = dataTableSource.Clone(); IEnumerable dynamicEnumerable = ds.Cast(); Set(kryptonDataGridView, dynamicEnumerable.ToList(), dataTableSource, deleteDataTableSource); } public static void Clear(this KryptonDataGridView kryptonDataGridView) { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; DataTable deleteDataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DeleteDataTableSource; kryptonDataGridView.DataSource = null; kryptonDataGridView.Refresh(); dataTableSource = new DataTable(); deleteDataTableSource = new DataTable(); Set(kryptonDataGridView, null!, dataTableSource, deleteDataTableSource); } public static void SetDataSource(this KryptonDataGridView kryptonDataGridView, T[] ds) { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; DataTable deleteDataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DeleteDataTableSource; if (ds == null) { kryptonDataGridView.DataSource = null; dataTableSource = new DataTable(); deleteDataTableSource = new DataTable(); Set(kryptonDataGridView, null!, dataTableSource, deleteDataTableSource); return; } //首先將entity轉為datatable dataTableSource = DataTableConvertor.ToDataTable(ds); dataTableSource.AcceptChanges(); deleteDataTableSource = dataTableSource.Clone(); IEnumerable dynamicEnumerable = ds.Cast(); Set(kryptonDataGridView, dynamicEnumerable.ToList(), dataTableSource, deleteDataTableSource); kryptonDataGridView.DataSource = dataTableSource; kryptonDataGridView.Refresh(); } public static void SetDataSourceCustomAttributee(this KryptonDataGridView kryptonDataGridView, T[] ds) { if (ds == null) { kryptonDataGridView.DataSource = null; GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource = default!; } else { IEnumerable dynamicEnumerable = ds.Cast(); GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource = dynamicEnumerable.ToList(); } } public static void SetDataSourceCustomAttributee(this KryptonDataGridView kryptonDataGridView, List ds) { if (ds == null) { kryptonDataGridView.DataSource = null; GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource = default!; } else { IEnumerable dynamicEnumerable = ds.Cast(); GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource = dynamicEnumerable.ToList(); } } public static T[] GetAddRows(this KryptonDataGridView kryptonDataGridView) where T : new() { return GetRows(kryptonDataGridView, DataRowState.Added); } private static T[] GetRows(this KryptonDataGridView kryptonDataGridView, DataRowState drs) where T : new() { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; if (dataTableSource == null || dataTableSource.Rows.Count == 0) return null!; DataTable dt = dataTableSource.Clone(); foreach (DataRowView drv in dataTableSource.DefaultView) { if (drv.Row.RowState != drs || drv.Row.RowState == DataRowState.Deleted) continue; //drv.Row.AcceptChanges(); dt.ImportRow(drv.Row); } if (dt.Rows.Count == 0) return null; List l = DataTableConvertor.ConvertToList(dt); return l.ToArray(); } public static void AddRow(this KryptonDataGridView kryptonDataGridView, T rows) where T : new() { AddRow(kryptonDataGridView, new T[] { rows }); } public static void AddRow(this KryptonDataGridView kryptonDataGridView, List rows) where T : new() { AddRow(kryptonDataGridView, rows.ToArray()); } public static void UpdateRow(this KryptonDataGridView kryptonDataGridView, T d, int rowIndex) { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; DataTable deleteDataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DeleteDataTableSource; if (d == null) return; if (dataTableSource == null || dataTableSource.Rows.Count == 0) return; GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource[rowIndex] = d; int i = 0; foreach (DataRowView drv in dataTableSource.DefaultView) { if (drv.Row.RowState == DataRowState.Deleted) { rowIndex = rowIndex + 1; i++; continue; } if (i != rowIndex) { i++; continue; } DataRow dr = drv.Row; PropertyInfo[] pi = typeof(T).GetProperties(); foreach (PropertyInfo p in pi) { foreach (DataColumn dc in dataTableSource.Columns) { if (p.Name != dc.ColumnName) continue; dr[dc] = p.GetValue(d, null) ?? DBNull.Value; break; } } kryptonDataGridView.DataSource = dataTableSource; kryptonDataGridView.Refresh(); Set(kryptonDataGridView, GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource, dataTableSource, deleteDataTableSource); return; } } public static void DeleteRow(this KryptonDataGridView kryptonDataGridView, int rowIndex) { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; DataTable deleteDataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DeleteDataTableSource; GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource.RemoveAt(rowIndex); int i = 0; foreach (DataRowView drv in dataTableSource.DefaultView) { if (drv.Row.RowState == DataRowState.Deleted) { rowIndex = rowIndex + 1; i++; continue; } if (i != rowIndex) { i++; continue; } if (drv.Row.RowState != DataRowState.Added) deleteDataTableSource.ImportRow(drv.Row); dataTableSource.DefaultView.Delete(rowIndex); i++; break; } Set(kryptonDataGridView, GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource, dataTableSource, deleteDataTableSource); } public static void DeleteRows(this KryptonDataGridView kryptonDataGridView, DataGridViewSelectedRowCollection drc) { foreach (DataGridViewRow dr in drc) { DeleteRow(kryptonDataGridView, dr.Index); } } public static void DeleteRows(this KryptonDataGridView kryptonDataGridView, DataGridViewSelectedCellCollection drc) { List rows = new List(); foreach (DataGridViewCell dr in drc) { if (rows.Contains(dr.RowIndex)) continue; rows.Add(dr.RowIndex); } //删除要从最大的行先删除,不然数据会发生变化,大的行数,接下来就没有对应的了 foreach (int i in rows.OrderByDescending(x => x).ToArray()) { DeleteRow(kryptonDataGridView, i); } } public static void AddRow(this KryptonDataGridView kryptonDataGridView, T[] rows) where T : new() { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; DataTable deleteDataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DeleteDataTableSource; if (rows != null && rows.Length > 0) { foreach (var row in rows) { if (GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource == null) GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource = new List(); GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource.Add(row); } } DataTable dt = DataTableConvertor.ToDataTable(rows); if (dataTableSource == null || dataTableSource.Columns.Count == 0) { dataTableSource = dt.Clone(); kryptonDataGridView.DataSource = dataTableSource; dataTableSource.AcceptChanges(); deleteDataTableSource = dataTableSource.Clone(); } foreach (DataRow dc in dt.Rows) { dataTableSource.ImportRow(dc); kryptonDataGridView.DataSource = dataTableSource; kryptonDataGridView.Refresh(); } Set(kryptonDataGridView, GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource, dataTableSource, deleteDataTableSource); } public static T[] GetDeleteRows(this KryptonDataGridView kryptonDataGridView) where T : new() { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; DataTable deleteDataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DeleteDataTableSource; if (deleteDataTableSource.Rows.Count == 0) return null; List l = DataTableConvertor.ConvertToList(deleteDataTableSource); return l.ToArray(); } public static T[] GetUpdateRows(this KryptonDataGridView kryptonDataGridView) where T : new() { return GetRows(kryptonDataGridView, DataRowState.Modified); } public static T[] GetUnchangedRows(this KryptonDataGridView kryptonDataGridView) where T : new() { return GetRows(kryptonDataGridView, DataRowState.Unchanged); } public static T[] GetAllRows(this KryptonDataGridView kryptonDataGridView) where T : new() { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; DataTable deleteDataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DeleteDataTableSource; if (dataTableSource.Rows.Count == 0) return null; DataTable dt = dataTableSource.Clone(); foreach (DataRowView drv in dataTableSource.DefaultView) { if (drv.Row.RowState == DataRowState.Deleted) continue; //drv.Row.AcceptChanges(); dt.ImportRow(drv.Row); } if (dt.Rows.Count == 0) return null; List l = DataTableConvertor.ConvertToList(dt); return l.ToArray(); } public static T[] GetDataSourceCustomAttribute(this KryptonDataGridView kryptonDataGridView) where T : new() { if (GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource == null) return null!; IEnumerable dynamicEnumerable = GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource.Cast(); return dynamicEnumerable.ToArray(); } public static T GetRowData(this KryptonDataGridView kryptonDataGridView, int rowIndex) where T : new() { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; if (dataTableSource == null || dataTableSource.Rows.Count == 0) return default!; int i = 0; foreach (DataRowView drv in dataTableSource.DefaultView) { if (drv.Row.RowState == DataRowState.Deleted) { rowIndex = rowIndex + 1; i++; continue; } if (i != rowIndex) { i++; continue; } DataTable dt = dataTableSource.Clone(); //drv.Row.AcceptChanges(); dt.ImportRow(drv.Row); List l = DataTableConvertor.ConvertToList(dt); i++; return l[0]; } return default(T); } public static T[] GetSelectedCellsData(this KryptonDataGridView kryptonDataGridView) where T : new() { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; if (dataTableSource == null || dataTableSource.Rows.Count == 0) return null!; List rows = new List(); foreach (DataGridViewCell dr in kryptonDataGridView.SelectedCells) { if (rows.Contains(dr.RowIndex)) continue; rows.Add(dr.RowIndex); } if (rows.Count == 0) return null; return GetRowsData(kryptonDataGridView, rows.ToArray()); } public static T[] GetSelectedRowsData(this KryptonDataGridView kryptonDataGridView) where T : new() { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; if (dataTableSource == null || dataTableSource.Rows.Count == 0) return null!; List rows = new List(); foreach (DataGridViewRow dr in kryptonDataGridView.SelectedRows) { if (rows.Contains(dr.Index)) continue; rows.Add(dr.Index); } if (rows.Count == 0) return null; return GetRowsData(kryptonDataGridView, rows.ToArray()); } public static T[] GetRowsData(this KryptonDataGridView kryptonDataGridView, int[] rows) where T : new() { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; if (dataTableSource == null) return null; DataTable dt = dataTableSource.Clone(); foreach (int j in rows) { int rowIndex = j; int i = 0; foreach (DataRowView drv in dataTableSource.DefaultView) { if (drv.Row.RowState == DataRowState.Deleted) { rowIndex = rowIndex + 1; i++; continue; } if (i != rowIndex) { i++; continue; } //drv.Row.AcceptChanges(); dt.ImportRow(drv.Row); break; } } List l = DataTableConvertor.ConvertToList(dt); return l.ToArray(); } public static int[] GetRowIndexs(this KryptonDataGridView kryptonDataGridView, DataGridViewSelectedCellCollection selectedCells) { List rowIndexs = new List(); foreach (DataGridViewCell cell in selectedCells) { if (!rowIndexs.Contains(cell.RowIndex)) rowIndexs.Add(cell.RowIndex); } return rowIndexs.ToArray(); } public static ExDataGridViewSnapshot TakeSnapshot(this KryptonDataGridView kryptonDataGridView) { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; DataTable deleteDataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DeleteDataTableSource; if (dataTableSource == null || GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource == null) return null; return new ExDataGridViewSnapshot() { DataSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataSource, DataTableSource = dataTableSource.Copy(), DeleteDataTableSource = deleteDataTableSource.Copy() }; } public static void SetSnapshot(this KryptonDataGridView kryptonDataGridView, ExDataGridViewSnapshot snapshot) { DataTable dataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DataTableSource; DataTable deleteDataTableSource = GetProvider().GetCustomAttribute(kryptonDataGridView).DeleteDataTableSource; if (snapshot == null) return; kryptonDataGridView.DataSource = dataTableSource = snapshot.DataTableSource; kryptonDataGridView.Refresh(); deleteDataTableSource = snapshot.DeleteDataTableSource; Set(kryptonDataGridView, snapshot.DataSource, dataTableSource, deleteDataTableSource); } public static void SetColumnDataSource(this KryptonDataGridView kryptonDataGridView, KryptonDataGridViewComboBoxColumn comboxCol, List ds, string displayMember, string valueMember, bool blankOption) { if (ds == null) { comboxCol.DataSource = null; return; } DataTable colDtbll = null; colDtbll = DataTableConvertor.ToDataTable(ds, blankOption); comboxCol.DataSource = colDtbll; comboxCol.DisplayMember = displayMember; comboxCol.ValueMember = valueMember; } public static void SetColumnDataSource(this KryptonDataGridView kryptonDataGridView, KryptonDataGridViewComboBoxColumn comboxCol, T[] ds, string displayMember, string valueMember, bool blankOption) { if (ds == null) { comboxCol.DataSource = null; return; } SetColumnDataSource(kryptonDataGridView, comboxCol, ds.ToList(), displayMember, valueMember, blankOption); } public static void SetColumnDataSource(this KryptonDataGridView kryptonDataGridView, KryptonDataGridViewComboBoxColumn comboxCol, TableName[] values, bool blankOption) { SetColumnDataSource>(kryptonDataGridView, comboxCol, values, TableName.DISPLAY_NAME, TableName.VALUE, blankOption); } public static void SetColumnDataSource(this KryptonDataGridView kryptonDataGridView, DataGridViewComboBoxColumn comboxCol, List ds, string displayMember, string valueMember, bool blankOption) { if (ds == null) { comboxCol.DataSource = null; return; } DataTable colDtbll = null; colDtbll = DataTableConvertor.ToDataTable(ds, blankOption); comboxCol.DataSource = colDtbll; comboxCol.DisplayMember = displayMember; comboxCol.ValueMember = valueMember; } public static void SetColumnDataSource(this KryptonDataGridView kryptonDataGridView, DataGridViewComboBoxColumn comboxCol, T[] ds, string displayMember, string valueMember, bool blankOption) { if (ds == null) { comboxCol.DataSource = null; return; } SetColumnDataSource(kryptonDataGridView, comboxCol, ds.ToList(), displayMember, valueMember, blankOption); } public static void SetColumnDataSource(this KryptonDataGridView kryptonDataGridView, DataGridViewComboBoxColumn comboxCol, TableName[] values, bool blankOption) { SetColumnDataSource>(kryptonDataGridView, comboxCol, values, TableName.DISPLAY_NAME, TableName.VALUE, blankOption); } #endregion public static BindingContextCustomAttribute GetCustomAttribute(this KryptonDataGridView kryptonDataGridView) { return GetProvider().GetCustomAttribute(kryptonDataGridView); } public static void InitColumn(this KryptonDataGridView kryptonDataGridView, bool isSort, bool showRowNumber) { kryptonDataGridView.AutoGenerateColumns = false; foreach (DataGridViewColumn column in kryptonDataGridView.Columns) { column.SortMode = isSort ? DataGridViewColumnSortMode.Automatic : DataGridViewColumnSortMode.NotSortable; } kryptonDataGridView.LoadUserPreference(); kryptonDataGridView.EditMode = DataGridViewEditMode.EditOnEnter; if (showRowNumber) kryptonDataGridView.RowPostPaint += (sender, e) => { // 绘制行号 if (e.RowIndex >= 0) { Rectangle bounds = new Rectangle( e.RowBounds.Left, e.RowBounds.Top, kryptonDataGridView.RowHeadersWidth, e.RowBounds.Height); TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), kryptonDataGridView.RowHeadersDefaultCellStyle.Font, bounds, kryptonDataGridView.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.Right | TextFormatFlags.VerticalCenter); } // 绘制总数(只在第一行绘制一次) if (e.RowIndex == 0) { var headerBounds = kryptonDataGridView.GetCellDisplayRectangle(-1, -1, true); if (headerBounds.Width > 0) { TextRenderer.DrawText(e.Graphics, $"{kryptonDataGridView.RowCount}", kryptonDataGridView.RowHeadersDefaultCellStyle.Font, headerBounds, Color.DarkBlue, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter); } } }; ContextMenuStrip contextMenuStrip; ToolStripMenuItem adjustColumnsToolStripMenuItem; contextMenuStrip = new ContextMenuStrip(); adjustColumnsToolStripMenuItem = new ToolStripMenuItem(); contextMenuStrip.SuspendLayout(); contextMenuStrip.Items.AddRange(new ToolStripItem[] { adjustColumnsToolStripMenuItem }); contextMenuStrip.Name = "contextMenuStrip"; Set(kryptonDataGridView, null!, null, null); // // adjustColumnsToolStripMenuItem // adjustColumnsToolStripMenuItem.Name = kryptonDataGridView.Name + DateTime.Now.ToString("yyyyHHddhhmmss");// "adjustColumnsToolStripMenuItem"; adjustColumnsToolStripMenuItem.Text = "调整列属性"; adjustColumnsToolStripMenuItem.Tag = kryptonDataGridView; adjustColumnsToolStripMenuItem.Click += new System.EventHandler(adjustColumnsToolStripMenuItem_Click); kryptonDataGridView.TopLeftHeaderCell.ContextMenuStrip = contextMenuStrip; foreach (DataGridViewColumn column in kryptonDataGridView.Columns) { column.HeaderCell.ContextMenuStrip = contextMenuStrip; } //kryptonDataGridView.ContextMenuStrip = contextMenuStrip; contextMenuStrip.ResumeLayout(false); } public static void adjustColumnsToolStripMenuItem_Click(object sender, EventArgs e) { KryptonDataGridViewColumnSetDialog f = new KryptonDataGridViewColumnSetDialog((KryptonDataGridView)((ToolStripMenuItem)sender).Tag); f.ShowDialog(); } public static string GetFormName(this KryptonDataGridView kryptonDataGridView, Control control) { //弹出的对话框时会为空 if (control == null) return string.Empty; if (control.Parent is AbstractPage || control.Parent is KryptonForm) return control.Parent.ToString(); else return kryptonDataGridView.GetFormName(control.Parent); } //加載用戶配置文件 public static void LoadUserPreference(this KryptonDataGridView kryptonDataGridView) { try { SecurityUserPreferenceEntity load = null!; SecurityUserPreferenceRequest request = ServiceHelper.GetTypeService(); SecurityUserPreferenceEntityKey key = new SecurityUserPreferenceEntityKey(); key.Username = ApplicationServiceContext.Context.Requestor; key.PreferenceKey = kryptonDataGridView.GetFormName(kryptonDataGridView) + "." + kryptonDataGridView.Name; load = request.FindByKey(key); if (load == null) return; ExDataGridViewInfo info = DeserializeHelper.Deserialize(load.Preference); Dictionary dic = new Dictionary(); int i = 0; DataGridViewColumnsInfo cf; foreach (DataGridViewColumnsInfo column in info.ColumnsInfo) { kryptonDataGridView.Columns[i].Frozen = false; dic.Add(column.Name, new string[] { column.DisplayIndex, column.Width, column.Visiable }); i++; } kryptonDataGridView.LoadGridView(dic); if (!string.IsNullOrEmpty(info.FrozenName)) kryptonDataGridView.Columns[info.FrozenName].Frozen = true; } catch (Exception ex) { ShowMessageBox.ShowError(ex.Message); } } /// /// 保存列的设置,按顺序为:列名,显示顺序,列宽,是否可见(True,false字符串) /// 自己需要将返回的内容持久化,通畅持久化需要再封装一次,增加用户及使用位置的标识,这样不同用户就可以有独立的配置 /// /// 返回的列名为dictionary[0],显示顺序(dictionary[0])[0],列宽(dictionary[0])[1],是否可见(dictionary[0])[2] public static Dictionary SaveGridView(this KryptonDataGridView kryptonDataGridView) { Dictionary dict = new Dictionary(); for (int i = 0; i < kryptonDataGridView.Columns.Count; i++) { foreach (DataGridViewColumn col in kryptonDataGridView.Columns) { if (col.DisplayIndex == i) { string[] value = { col.DisplayIndex.ToString(), col.Width.ToString(), col.Visible.ToString() }; dict.Add(col.Name, value); } } } return dict; } /// /// 列宽的加载,从传入的字典内加载用户传入的列信息 /// 传入的内容应该按照显示顺序由小到大进行排序了 /// 将持久化的列信息加载,一般应包含当前用户及控件使用位置信息 /// /// Dictionary<列名,{显示顺序,列宽,是否可见(True,false字符串)}> public static void LoadGridView(this KryptonDataGridView kryptonDataGridView, Dictionary dict) { if (dict.Count <= 0) return; try { foreach (string dic in dict.Keys) { if (kryptonDataGridView.Columns.Contains(dic)) { DataGridViewColumn column = kryptonDataGridView.Columns[dic]; column.DisplayIndex = Convert.ToInt32(dict[dic][0]); column.Visible = Convert.ToBoolean(dict[dic][2]); if (column.Visible) { column.Width = Convert.ToInt32(dict[dic][1]) > 20 ? Convert.ToInt32(dict[dic][1]) : 120; //小于20则自动调整为120. } } } } catch (Exception e) { throw e; } } private static BindingContextAttributeProvider GetProvider() { return ServiceHelper.GetService() ?? throw new InvalidOperationException("BindingContextAttributeProvider is not registered in the service GetProvider()."); } public static TemplateHeader[] GetTemplateHeaders(this KryptonDataGridView kryptonDataGridView) { List headers = new List(); foreach (DataGridViewColumn column in kryptonDataGridView.Columns) { TemplateHeader header = new TemplateHeader(); header.BindingName = column.DataPropertyName; header.DisplayName = column.HeaderText; header.Format = column.DefaultCellStyle.Format; if (!column.Visible) continue; header.Width = column.Width / 8; header.DisplayIndex = column.DisplayIndex; headers.Add(header); } return headers.OrderBy(x => x.DisplayIndex).ToArray(); } } }