namespace Common.Components
{
public enum DataGridViewAutoIndexMode
{
NewColumn = 1,
RowHeader = 0,
None = 2
}
public partial class DataGridViewPagingSumCtrl : UserControl
{
public void SetDataSource<T>(List<T> list)
{
DisableEvents();
DisableColumnsResizeEvent();
this.dataGridView.DataSource = null;
SetColumnsResizeEvent();
if (list != null && list.Count > 0)
{
DataSource = list;
}
EnableEvents();
}
/// <summary>
/// 返回菜单组件
/// </summary>
public ContextMenuStrip InnerContextMenuStrip
{
get
{
return this.contextMenuStripDataGridView;
}
}
public ESBasic.Action<String, bool> ColumnSorting;
/// <summary>
/// 检查是否显示统计信息,默认不显示
/// </summary>
// private Boolean showSummaryRows = false;
private const string NEW_COLUMN_NAME_DATETIME_TO_STR = "_DATETIME_TO_STR";
private bool showRowCounts = true;
public bool ShowRowCounts
{
get
{
return showRowCounts;
}
set
{
showRowCounts = value;
skinLabelTotalCount.Visible = value;
SetVisible();
}
}
/// <summary>
/// 增加序号
/// </summary>
public bool AutoIndex
{
get { return dataGridView.Columns.Contains(autoIndexColumn); }
set
{
if (value)
{
if (!dataGridView.Columns.Contains(autoIndexColumn))
{
AddIndexRow();
SetStyle();
}
}
else
{
if (dataGridView.Columns.Contains(autoIndexColumn))
{
dataGridView.Columns.Remove(autoIndexColumn);
}
}
}
}
//这个要在调用初始化的时候先使用,否则字段模式会变成NOSET,或者直接使用SpecAutoSizeMode设置即可
public void SpecAutoSizeModeColumns(DataGridViewColumn[] dataGridViewColumn)
{
foreach (var item in dataGridViewColumn)
{
SpecAutoSizeMode(new TKeyValue<DataGridViewColumn, DataGridViewAutoSizeColumnMode>(item, item.AutoSizeMode));
}
}
/// <summary>
/// 解决排序时闪烁的问题,多次变更当前行,致使页面多次刷新,还有重新排序时,禁用刷新页面
///</summary>
public EventHandler SelectionChanged
{
get { return selectionChanged; }
set
{
selectionChanged = value;
// dataGridView.SelectionChanged
}
}
// internal Delegate selectionChanged;
private EventHandler selectionChanged;
private static string[] ROW_HEADERS = new string[] { "小计", "总计" };
private DataGridView dataGridView;
private bool isPaging;
// private int calRowsCount;
private PageControlPanel PageControlPanel { get; set; }
private List<TKeyValue<DataGridViewColumn, DataGridViewAutoSizeColumnMode>> specAutoSizeMode;
/// <summary>
/// 设定特定列的显示方式
/// </summary>
/// <param name="keyValue"></param>
public void SpecAutoSizeMode(TKeyValue<DataGridViewColumn, DataGridViewAutoSizeColumnMode> keyValue)
{
if (specAutoSizeMode == null)
{
specAutoSizeMode = new List<TKeyValue<DataGridViewColumn, DataGridViewAutoSizeColumnMode>>();
}
specAutoSizeMode.Add(keyValue);
}
/// <summary>
/// 总页数
/// </summary>
private int pageCount;
/// <summary>
/// 当前页数
/// </summary>
private int currentPageIndex;
private DataTable SourceDataTable { get; set; }
/// <summary>
/// 要进行统计的列绑定字段
/// </summary>
// public List<DataGirdViewCalculateColumn> CalculateColumns { get; internal set; }
public string[] ColumnDataPropertyNames { get; internal set; }
private CbGeneric<int> CurrentPageIndexChanged;
public CbGeneric<int> SelectionChange;
internal void Change_Color(int rowIndex, int columnIndex)
{
dataGridView.Rows[rowIndex].Cells[columnIndex].ReadOnly = true;
DataGridViewCell cell = new DataGridViewTextBoxCell();
cell.Style.BackColor = Color.Wheat;
//cell.ReadOnly = true;
cell.Value = "N";
cell.Style.BackColor = Color.White;
dataGridView.Rows[rowIndex].Cells[columnIndex] = cell;
dataGridView.Rows[rowIndex].Cells[columnIndex].Style.ForeColor = Color.White;
dataGridView.Rows[rowIndex].Cells[columnIndex].Style.SelectionBackColor = Color.White;
dataGridView.Rows[rowIndex].Cells[columnIndex].Style.SelectionForeColor = Color.White;
}
/// <summary>
/// 在第一次传参时设置排序参数的默认查询结果,供OrderSearch调用,这个跟服务端功能关系有点多
/// </summary>
public BaseOrderPara OrderPara { get; set; }
public CbGeneric<Object, EventArgs> PageSizeChange { get; set; }
public int PageSize
{
get
{
int value = 0;
try
{
value = int.Parse(this.skinComboBoxPageSize.Text);
}
catch (Exception ex)
{
value = (int)this.skinComboBoxPageSize.SelectedValue;
}
return value;
}
}
public bool[] abs4Column { get; internal set; }
/// <summary>
/// 初始化后调用Search事件调用服务端查询 dataGridViewPagingSumCtrl.OrderSearch += Search;
/// </summary>
public ESBasic.Action<Object, EventArgs> OrderSearch;
public DataGridViewCellFormattingEventHandler CellFormatting;
internal void Clear()
{
this.dataGridView.DataSource = null;
this.pageControlPanel21.Initialize(1);
}
///没有分页的
public DataGridViewPagingSumCtrl(DataGridView view, string[] calculateColumns = null)
{
InitializeComponent();
this.dataGridView = view;
summaryControlContainer1.DGV = view;
summaryControlContainer2.DGV = view;
ColumnDataPropertyNames = calculateColumns;
this.isPaging = false;
}
/// <summary>
/// 需要分页的
/// </summary>
/// <param name="view"></param>
/// <param name="calculateColumns"></param>
/// <param name="CurrentPageIndexChanged"></param>
/// <param name="PageSizeChange"></param>
/// <param name="pagePara">排序的时候使用</param>
public DataGridViewPagingSumCtrl(DataGridView view, CbGeneric<int> CurrentPageIndexChanged, CbGeneric<object, EventArgs> PageSizeChange, string[] calculateColumns = null)
{
InitializeComponent();
this.dataGridView = view;
this.isPaging = true;
summaryControlContainer1.DGV = view;
summaryControlContainer2.DGV = view;
ColumnDataPropertyNames = calculateColumns;
this.CurrentPageIndexChanged = CurrentPageIndexChanged;
// Initialize();
}
private void SetColumnsResizeEvent()
{
DisableColumnsResizeEvent();
dataGridView.Resize += DataGridView_Resize;
dataGridView.RowHeadersWidthChanged += DataGridView_RowHeadersWidthChanged;
dataGridView.DataSourceChanged += DataGridView_DataSourceChanged;
dataGridView.CellFormatting += DataGridView_CellFormatting;
}
private void DisableColumnsResizeEvent()
{
dataGridView.Resize -= DataGridView_Resize;
dataGridView.DataSourceChanged -= DataGridView_DataSourceChanged;
dataGridView.RowHeadersWidthChanged -= DataGridView_RowHeadersWidthChanged;
dataGridView.CellFormatting -= DataGridView_CellFormatting;
}
private void SetPrivateEvent()
{ //分页标签索引改变时触发
// DisablePrivateEvent();
this.dataGridView.DataBindingComplete += DataGridView_DataBindingComplete;
pageControlPanel21.CurrentPageIndexChanged += PageControlPanel21_CurrentPageIndexChanged;
dataGridView.DataError += DataGridView_DataError;
this.dataGridView.CellMouseDown += DataGridView_CellMouseDown;
dataGridView.ColumnHeaderMouseClick += dataGridView1_ColumnHeaderMouseClick;
dataGridView.KeyDown += DataGridView_KeyDown;
// dataGridView.RowStateChanged += DataGridView_RowStateChanged;
}
//private void DisablePrivateEvent()
//{
// DisableColumnsResizeEvent();
// this.dataGridView.DataBindingComplete -= DataGridView_DataBindingComplete;
// pageControlPanel21.CurrentPageIndexChanged -= PageControlPanel21_CurrentPageIndexChanged;
// dataGridView.DataError -= DataGridView_DataError;
// this.dataGridView.CellMouseDown -= DataGridView_CellMouseDown;
// dataGridView.ColumnHeaderMouseClick -= dataGridView1_ColumnHeaderMouseClick;
// dataGridView.KeyDown -= DataGridView_KeyDown;
//}
public new void DoubleBuffered(bool buffered)
{
if (dataGridView != null)
{
dataGridView.DoubleBuffered(buffered);
}
}
/// <summary>
/// 自动定焦点到指定的可写单元格内
/// </summary>
public void AutoFocusToWritableCell()
{
DataGridViewUtil.AutoFocusToFirstWritableCell(this.dataGridView);
}
//自动滚动到最后一行
public void ScrollToEnd()
{
if (dataGridView != null && dataGridView.RowCount > 0)
{
int index = dataGridView.RowCount - 1;
DataGridViewUtil.ScrollToRowIndex(dataGridView,index);
}
}
public void ScrollToRowIndex(int index)
{
DataGridViewUtil.ScrollToRowIndex(dataGridView, index);
}
private void DataGridView_DataError(object sender,