using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Drawing;

{
![]()
/// 格式化字符串
/// </summary>
![]()
{

Text
= 0x0, //文本
Boolean, //是/否(钩选框)
Money, //货币(¥#0.00)
Numeric, //数值格式(#0.00)
RealNumber, //实数(0.000000)
LongDateTime, //长日期时间(yyyy年mm月dd日 hh:mm:ss)
DateTime, //日期时间(yyyy-mm-dd hh:mm:ss)
LongDate, //长日期(yyyy-mm-dd)
ShortDate, //短日期(yy-mm-dd)
Time //时间(hh:mm:ss)
};

![]()
/// StyleManager 的摘要说明。
/// DataGrid 的属性管理类
/// </summary>
![]()
{

public static int lastSelectIndex = -1;
private DataGrid _dataGrid =null;
private DataTable _dataTable =null;
private bool _allowSelectedRow =false;
private int[] ReadonlyRows = null;
private bool isReadonlyRow = false;
private bool _dataGridReadonly = false;

{
_dataGrid = dataGrid;
}
![]()

[Category("Action")]
[Description("可操作的数据表格")]
{
![]()
{
_dataGrid=value;
this._dataGrid.CurrentCellChanged -= new System.EventHandler(this.dataGrid_CurrentCellChanged);
{
{
//修改事件
this._dataGrid.CurrentCellChanged += new System.EventHandler(this.dataGrid_CurrentCellChanged);
}
}
}
}
[Category("Data")]
[Description("要与数据表格绑定的数据源")]
{
![]()
![]()
}
[Category("Appearance")]
[Description("获取当前的表格风格")]
{
![]()
}

![]()
/// 允许行选择模式
/// </summary>
[Category("Behavior")]
[Description("允许行选择模式")]
{
![]()
{
_allowSelectedRow =value;
this._dataGrid.CurrentCellChanged -= new System.EventHandler(this.dataGrid_CurrentCellChanged);
{
{
//修改事件
this._dataGrid.CurrentCellChanged += new System.EventHandler(this.dataGrid_CurrentCellChanged);
}
}
}
}
[Category("Behavior")]
[Description("表格只读,也可隐藏底部的新增行")]
{
![]()
![]()
}
![]()
/// 行选择事件
/// </summary>
/// <param name="sender">对象</param>
/// <param name="e">事件参数</param>
![]()
{
![]()
{
![]()
{
this._dataGrid.Select(this._dataGrid.CurrentRowIndex);
{
this._dataGrid.UnSelect(StyleManager.lastSelectIndex);
}
StyleManager.lastSelectIndex = this._dataGrid.CurrentRowIndex;
![]()
}
//锁定表格行的算法
{
this._dataGrid.ReadOnly = false;
if(this.ReadonlyRows.Length>0)
{
{
this._dataGrid.ReadOnly = true;
break;
}
}
}
{
this._dataGrid.ReadOnly = true;
return;
}
}

![]()
/// 设置列头风格
/// </summary>
/// <param name="HeaderFont">字体</param>
/// <param name="HeaderFontColor">文字颜色</param>
/// <returns>是否成功</returns>
![]()
{
![]()
{

DataGridTableStyle currGTS
= GetGridTableStyle();
{
throw new Exception("初始化表风格出错!");
}
currGTS.HeaderFont = HeaderFont;
currGTS.HeaderForeColor = HeaderFontColor;
return true;
{
return false;
}
}
![]()
/// 设置列头风格,默认黑色字体颜色
/// </summary>
/// <param name="HeaderFont">字体</param>
/// <returns>是否成功</returns>
![]()
{
return SetHeader(HeaderFont,System.Drawing.Color.Black);
}
![]()
/// 设置表格风格
/// </summary>
/// <param name="CaptionText">标题文本</param>
/// <param name="CaptionVisible">标题可视</param>
/// <param name="RowHeaderVisible">行头可视</param>
/// <returns>是否成功</returns>
![]()
{
![]()
{

DataGridTableStyle currGTS
= GetGridTableStyle();
{
throw new Exception("初始化表风格出错!");
}
{
throw new Exception("无可操作的表格对象!");
}
this._dataGrid.CaptionText = CaptionText;
this._dataGrid.CaptionVisible = CaptionVisible;
currGTS.RowHeadersVisible = RowHeaderVisible;
return true;
{
return false;
}
}

![]()
/// 根据数据类型获取列类型
/// </summary>
/// <param name="tp">数据类型</param>
/// <returns></returns>
![]()
{
![]()
{
return 2;
{
return 6;
{
return 1;
{
return 3;
{
return 0;
}
}
![]()
/// 获取默认默认风格
/// </summary>
/// <returns>表风格</returns>
![]()
{
![]()
{
if (_dataGrid.TableStyles.Count<=0&&_dataTable==null)
throw new ArgumentNullException("数据源为空!");

{
_dataGrid.DataSource = _dataTable;
}

{
DataGridTableStyle style = new DataGridTableStyle();
style.MappingName = _dataTable.TableName;
{

{
DataGridBoolColumn gridColumn = new DataGridBoolColumn();
gridColumn.TrueValue = true;
gridColumn.FalseValue = false;
gridColumn.MappingName = column.ColumnName;
gridColumn.HeaderText = column.ColumnName;
gridColumn.Width = _dataGrid.PreferredColumnWidth;
style.GridColumnStyles.Add(gridColumn);

{
DataGridTextBoxColumn gridColumn = new DataGridTextBoxColumn();
gridColumn.MappingName = column.ColumnName;
gridColumn.HeaderText = column.ColumnName;
gridColumn.Width = _dataGrid.PreferredColumnWidth;
gridColumn.NullText = "";
style.GridColumnStyles.Add(gridColumn);

}
}
_dataGrid.TableStyles.Clear();
_dataGrid.TableStyles.Add(style);
}

return _dataGrid.TableStyles[0];
{
return null;
}
}

{
return (_dataTable.Columns[ColumnName].DataType==System.Type.GetType("System.Boolean"));
}

{
{
{
return i;
}
}
return -1;
}

![]()
/// 设置只读的行
/// </summary>
/// <param name="rowIndexs">行索引数组</param>
/// <param name="Readonly">是否只读</param>
/// <returns>是否成功</returns>
![]()
{
![]()
{
this.isReadonlyRow = Readonly;
this.ReadonlyRows = rowIndexs;
return true;
{
return false;
}
}
![]()
/// 设置列只读属性
/// </summary>
/// <param name="columnIndexs">列索引数组</param>
/// <param name="Readonly">只读属性</param>
/// <returns>是否处理成功</returns>
![]()
{
//获取表风格
{
DataGridTableStyle currGTS = GetGridTableStyle();
{
throw new Exception("初始化表风格出错!");
}

{
throw new ArgumentOutOfRangeException("只读索引超出范围!");
}

DataGridColumnStyle GCS;

{
{
throw new ArgumentOutOfRangeException("索引超出范围!");
}

GCS = currGTS.GridColumnStyles[columnIndexs[i]];
{
(GCS as DataGridBoolColumn).ReadOnly = Readonly;
{
(GCS as DataGridTextBoxColumn).ReadOnly = Readonly;
}
}
return true;
![]()
}

![]()
/// 设置列只读属性
/// </summary>
/// <param name="columnNames">列名称数组</param>
/// <param name="Readonly">只读属性</param>
/// <returns>是否处理成功</returns>
![]()
{
//获取表风格
{
DataGridTableStyle currGTS = GetGridTableStyle();
{
throw new Exception("初始化表风格出错!");
}

{
throw new ArgumentOutOfRangeException("只读索引超出范围!");
}

DataGridColumnStyle GCS;
int columnIndex =-1;
{
columnIndex = getColumnIndex(currGTS,columnNames[i]);
{
throw new Exception("列名称为空或者无效!");
}
GCS = currGTS.GridColumnStyles[columnNames[i]];
{
(GCS as DataGridBoolColumn).ReadOnly = Readonly;
{
(GCS as DataGridTextBoxColumn).ReadOnly = Readonly;
}
}
return true;
![]()
}

![]()
/// 设置列属性
/// </summary>
/// <param name="columnIndex">列索引值</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <param name="Format">列格式</param>
/// <param name="Align">靠齐方式</param>
/// <param name="Visible">是否可见</param>
/// <returns>完成状态</returns>
![]()
{
![]()
{
//获取表风格
DataGridTableStyle currGTS = GetGridTableStyle();
string MappingName= null;
{
throw new Exception("初始化表风格出错!");
}

{
throw new ArgumentOutOfRangeException("索引超出范围!");
}

//处理参数
Width = (Math.Abs(Width));
Title = (Title == null ? "" : Title);
Format = ((object)Format == null ? FormatIndex.Text : Format);
Align = ((object)Align == null ? HorizontalAlignment.Left : Align);

MappingName = currGTS.GridColumnStyles[columnIndex].MappingName;
DataGridColumnStyle GCS = currGTS.GridColumnStyles[columnIndex];

{
DataGridTextBoxColumn gridColumn = (GCS as DataGridTextBoxColumn);
{
case 2:
gridColumn.Format = "C";
break;
case 3:
gridColumn.Format = "N";
break;
case 5:
gridColumn.Format=System.String.Format("yyyy年MM月dd日 hh:mm:ss",gridColumn.TextBox);
break;
case 6:
gridColumn.Format=System.String.Format("yyyy-MM-dd hh:mm:ss",gridColumn.TextBox);
break;
case 7:
gridColumn.Format=System.String.Format("yyyy-MM-dd",gridColumn.TextBox);
break;
case 8:
gridColumn.Format=System.String.Format("yy-MM-dd",gridColumn.TextBox);
break;
case 9:
gridColumn.Format= System.String.Format("hh:mm:ss",gridColumn.TextBox);
break;
default:
gridColumn.Format = "";
break;
}

gridColumn.Width = Width;
gridColumn.MappingName = MappingName;
gridColumn.HeaderText = (Title.ToString()==""||Title==null ? MappingName : Title.ToString());
gridColumn.Alignment = Align;
gridColumn.NullText = "";
}

//隐藏字段
{
GCS.Width =0;
GCS.HeaderText ="";
}

return true;
{
return false;
}
}
![]()
/// 设置列属性,默认可见
/// </summary>
/// <param name="columnIndex">列索引值</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <param name="Format">列格式</param>
/// <param name="Align">靠齐方式</param>
/// <returns>完成状态</returns>
![]()
{
return SetColumn(columnIndex,Width,Title,Format,Align,true);
}
![]()
/// 设置列属性,默认可见,默认靠齐居左
/// </summary>
/// <param name="columnIndex">列索引值</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <param name="Format">列格式</param>
/// <returns>完成状态</returns>
![]()
{
return SetColumn(columnIndex,Width,Title,Format,HorizontalAlignment.Left,true);
}
![]()
/// 设置列属性,默认可见,默认靠齐居左,默认文本格式
/// </summary>
/// <param name="columnIndex">列索引值</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <returns>完成状态</returns>
![]()
{
return SetColumn(columnIndex,Width,Title,FormatIndex.Text,HorizontalAlignment.Left,true);
}
![]()
/// 设置列属性,默认可见,默认靠齐居左,默认文本格式,默认标题为影射名
/// </summary>
/// <param name="columnIndex">列索引值</param>
/// <param name="Width">宽度</param>
/// <returns>完成状态</returns>
![]()
{
return SetColumn(columnIndex,Width,"",FormatIndex.Text,HorizontalAlignment.Left,true);
}

![]()
/// 设置列属性
/// </summary>
/// <param name="columnName">列名称</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <param name="Format">列格式</param>
/// <param name="Align">靠齐方式</param>
/// <param name="Visible">是否可见</param>
/// <returns>完成状态</returns>
![]()
{

DataGridTableStyle currGTS
= GetGridTableStyle();
{
throw new Exception("初始化表风格出错!");
}
int columnIndex = getColumnIndex(currGTS,columnName);
{
throw new Exception("列名称为空或者无效!");
}

return SetColumn(columnIndex,Width,Title,Format,Align,Visible);
}
![]()
/// 设置列属性,默认可见
/// </summary>
/// <param name="columnName">列名称</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <param name="Format">列格式</param>
/// <param name="Align">靠齐方式</param>
/// <returns>完成状态</returns>
![]()
{

DataGridTableStyle currGTS
= GetGridTableStyle();
{
throw new Exception("初始化表风格出错!");
}
int columnIndex = getColumnIndex(currGTS,columnName);
{
throw new Exception("列名称为空或者无效!");
}

return SetColumn(columnIndex,Width,Title,Format,Align);
}
![]()
/// 设置列属性,默认可见,默认靠齐居左
/// </summary>
/// <param name="columnName">列名称</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <param name="Format">列格式</param>
/// <returns>完成状态</returns>
![]()
{

DataGridTableStyle currGTS
= GetGridTableStyle();
{
throw new Exception("初始化表风格出错!");
}
int columnIndex = getColumnIndex(currGTS,columnName);
{
throw new Exception("列名称为空或者无效!");
}

return SetColumn(columnIndex,Width,Title,Format);
}
![]()
/// 设置列属性,默认可见,默认靠齐居左,默认文本格式
/// </summary>
/// <param name="columnName">列名称</param>
/// <param name="Width">宽度</param>
/// <param name="Title">标题文本</param>
/// <returns>完成状态</returns>
![]()
{

DataGridTableStyle currGTS
= GetGridTableStyle();
{
throw new Exception("初始化表风格出错!");
}
int columnIndex = getColumnIndex(currGTS,columnName);
{
throw new Exception("列名称为空或者无效!");
}

return SetColumn(columnIndex,Width,Title);
}
![]()
/// 设置列属性,默认可见,默认靠齐居左,默认文本格式,默认标题为影射名
/// </summary>
/// <param name="columnName">列名称</param>
/// <param name="Width">宽度</param>
/// <returns>完成状态</returns>
![]()
{

DataGridTableStyle currGTS
= GetGridTableStyle();
{
throw new Exception("初始化表风格出错!");
}
int columnIndex = getColumnIndex(currGTS,columnName);
{
throw new Exception("列名称为空或者无效!");
}

return SetColumn(columnIndex,Width);
}
}
}