众所周知,WINForm 的 DataGrid 组件的功能强大而且灵活,作为一个数据库程序离开它可不行,但是dataGrid在设计期间采用“套用式样”的方式设计表格的外观并不够灵活,那有没有办法统一管理表格风格呢?答案是有。 
    作为数据表格的应用最重要的应该不是风格的颜色搭配,而是字段属性的格式化,要格式化每一列的数据显示值,比如说:dataGrid的记录集如果有个“日期时间”字段的话,就会发现,默认的话其实它只显示了日期部分,而时间被Format掉了,这样的话不能满足应用的需求。很多新手朋友也发过帖子询问如何显示出时间,本人也是属于新手行列,查阅了MSDN后编写了一个管理dataGrid 格式列和风格的类,它可以实现管理‘列宽、字体、标题名、格式类型、是否隐藏、行选、行只读、列只读’的基本功能。 
    先大致讲一下格式化列的原理。列的格式由DataGridTextBoxColumn的Format属性进行控制,Format 属性可以支持日期、货币、数值、文本等格式字符,具体信息可以参考MSDN:http://msdn.microsoft.com/library/CHS/cpref/html/frlrfSystemWindowsFormsDataGridTextBoxColumnClassFormatTopic.asp?frame=true。 
    这里演示格式化“日期时间”,代码: 
DataGridTextBoxColumn gridColumn = DataGridTextBoxColumn(); 
gridColumn.Format=System.String.Format("yyyy-MM-dd hh:mm:ss",gridColumn.TextBox); 
    类的基本流程: 

DataGrid 风格管理类测试版源码_System


 

    现在我把类的源码贴上面,我不保证代码的一些做法是否合理与正确,仅供参考:    

using System; 
 using System.ComponentModel; 
 using System.Windows.Forms; 
 using System.Data; 
 using System.Drawing; 
  
 namespace Grid.Service { 
   /** <summary> 
   /// 格式化字符串 
   /// </summary> 
   public enum FormatIndex{ 
     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) 
   }; 
  
   /** <summary> 
   /// StyleManager 的摘要说明。 
   /// DataGrid 的属性管理类 
   /// </summary> 
   public class StyleManager { 
  
     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; 
  
     public StyleManager(DataGrid dataGrid){ 
       _dataGrid = dataGrid; 
     } 
     public StyleManager(){;} 
  
     [Category("Action")] 
     [Description("可操作的数据表格")] 
     public DataGrid @DataGrid{ 
       get{return _dataGrid;} 
       set{ 
         _dataGrid=value; 
          
         this._dataGrid.CurrentCellChanged -= new System.EventHandler(this.dataGrid_CurrentCellChanged); 
         if(this._allowSelectedRow){ 
           if(_dataGrid!=null){ 
             //修改事件 
             this._dataGrid.CurrentCellChanged += new System.EventHandler(this.dataGrid_CurrentCellChanged); 
           } 
         } 
       } 
     } 
     [Category("Data")] 
     [Description("要与数据表格绑定的数据源")] 
     public DataTable DataSource{ 
       get{return _dataTable;} 
       set{_dataTable =(value as DataTable);} 
     } 
     [Category("Appearance")] 
     [Description("获取当前的表格风格")] 
     public DataGridTableStyle CurrentTableStyle{ 
       get{return GetGridTableStyle();} 
     } 
  
     /** <summary> 
     /// 允许行选择模式 
     /// </summary> 
     [Category("Behavior")] 
     [Description("允许行选择模式")] 
     public bool AllowSelectedRow{ 
       get{return _allowSelectedRow;} 
       set{ 
         _allowSelectedRow =value; 
         this._dataGrid.CurrentCellChanged -= new System.EventHandler(this.dataGrid_CurrentCellChanged); 
         if(value){ 
           if(_dataGrid!=null){ 
             //修改事件 
             this._dataGrid.CurrentCellChanged += new System.EventHandler(this.dataGrid_CurrentCellChanged); 
           } 
         } 
       } 
     } 
     [Category("Behavior")] 
     [Description("表格只读,也可隐藏底部的新增行")] 
     public bool ReadOnly{ 
       get{return _dataGridReadonly;} 
       set{_dataGridReadonly = value;} 
     } 
     /** <summary> 
     /// 行选择事件 
     /// </summary> 
     /// <param name="sender">对象</param> 
     /// <param name="e">事件参数</param> 
     private void dataGrid_CurrentCellChanged(object sender, System.EventArgs e) { 
      
       if(this.DataSource!=null){ 
         try{ 
           this._dataGrid.Select(this._dataGrid.CurrentRowIndex); 
           if(StyleManager.lastSelectIndex!=-1){ 
             this._dataGrid.UnSelect(StyleManager.lastSelectIndex); 
           } 
           StyleManager.lastSelectIndex = this._dataGrid.CurrentRowIndex; 
         }catch{;} 
       } 
       //锁定表格行的算法 
       if(isReadonlyRow&&this.ReadonlyRows!=null){ 
         this._dataGrid.ReadOnly = false; 
         if(this.ReadonlyRows.Length>0) 
           for(int i=0;i<ReadonlyRows.Length;i++){ 
             if(this._dataGrid.CurrentRowIndex==ReadonlyRows[i]){ 
               this._dataGrid.ReadOnly = true; 
               break; 
             } 
           } 
       } 
       if(_dataGridReadonly){ 
         this._dataGrid.ReadOnly = true; 
         return; 
       } 
     } 
  
     /** <summary> 
     /// 设置列头风格 
     /// </summary> 
     /// <param name="HeaderFont">字体</param> 
     /// <param name="HeaderFontColor">文字颜色</param> 
     /// <returns>是否成功</returns> 
     public bool SetHeader(Font HeaderFont,Color HeaderFontColor){ 
       try{ 
         DataGridTableStyle currGTS = GetGridTableStyle(); 
         if(currGTS==null){ 
           throw new Exception("初始化表风格出错!"); 
         } 
         currGTS.HeaderFont = HeaderFont; 
         currGTS.HeaderForeColor = HeaderFontColor; 
         return true; 
       }catch{ 
         return false; 
       } 
     } 
     /** <summary> 
     /// 设置列头风格,默认黑色字体颜色 
     /// </summary> 
     /// <param name="HeaderFont">字体</param> 
     /// <returns>是否成功</returns> 
     public bool SetHeader(Font HeaderFont){ 
       return SetHeader(HeaderFont,System.Drawing.Color.Black); 
     } 
     /** <summary> 
     /// 设置表格风格 
     /// </summary> 
     /// <param name="CaptionText">标题文本</param> 
     /// <param name="CaptionVisible">标题可视</param> 
     /// <param name="RowHeaderVisible">行头可视</param> 
     /// <returns>是否成功</returns> 
     public bool SetGrid(string CaptionText,bool CaptionVisible,bool RowHeaderVisible){ 
       try{ 
         DataGridTableStyle currGTS = GetGridTableStyle(); 
         if(currGTS==null){ 
           throw new Exception("初始化表风格出错!"); 
         } 
         if(this._dataGrid==null){ 
           throw new Exception("无可操作的表格对象!"); 
         } 
         this._dataGrid.CaptionText = CaptionText; 
         this._dataGrid.CaptionVisible = CaptionVisible; 
         currGTS.RowHeadersVisible = RowHeaderVisible; 
         return true; 
       }catch{ 
         return false; 
       } 
     } 
  
     /** <summary> 
     /// 根据数据类型获取列类型 
     /// </summary> 
     /// <param name="tp">数据类型</param> 
     /// <returns></returns> 
     private int getDataGridExColumn(Type tp){ 
       if(tp==System.Type.GetType("System.Boolean")){ 
         return 2; 
       }else if(tp==System.Type.GetType("System.DateTime")){ 
         return 6; 
       }else if(tp==System.Type.GetType("System.Decimal")){ 
         return 1; 
       }else if(tp==System.Type.GetType("System.Single")||tp==System.Type.GetType("System.Double")) { 
         return 3; 
       }else{ 
         return 0; 
       } 
     } 
     /** <summary> 
     /// 获取默认默认风格 
     /// </summary> 
     /// <returns>表风格</returns> 
     private DataGridTableStyle GetGridTableStyle(){ 
       try{ 
         if (_dataGrid.TableStyles.Count<=0&&_dataTable==null) 
           throw new ArgumentNullException("数据源为空!"); 
  
         if((_dataGrid.DataSource as DataTable)!=_dataTable){ 
           _dataGrid.DataSource = _dataTable; 
         } 
  
         if(_dataGrid.TableStyles.Count<=0){ 
           DataGridTableStyle style = new DataGridTableStyle(); 
           style.MappingName = _dataTable.TableName; 
           foreach(DataColumn column in _dataTable.Columns) { 
  
             if(column.DataType==System.Type.GetType("System.Boolean")){ 
               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); 
  
             }else{ 
               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]; 
       }catch{ 
         return null; 
       } 
     } 
  
     private bool isBoolColumn(string ColumnName){ 
       return (_dataTable.Columns[ColumnName].DataType==System.Type.GetType("System.Boolean")); 
     } 
  
     private int getColumnIndex(DataGridTableStyle DGTS , string columName){ 
       for(int i=0;i<DGTS.GridColumnStyles.Count;i++){ 
         if(DGTS.GridColumnStyles[i].HeaderText.ToString().Trim()==columName.ToString().Trim()){ 
           return i; 
         } 
       } 
       return -1; 
     } 
  
     /** <summary> 
     /// 设置只读的行 
     /// </summary> 
     /// <param name="rowIndexs">行索引数组</param> 
     /// <param name="Readonly">是否只读</param> 
     /// <returns>是否成功</returns> 
     public bool SetReadOnlyRows(int[] rowIndexs,bool Readonly){ 
       try{ 
         this.isReadonlyRow = Readonly; 
         this.ReadonlyRows = rowIndexs; 
         return true; 
       }catch{ 
         return false; 
       } 
     } 
     /** <summary> 
     /// 设置列只读属性 
     /// </summary> 
     /// <param name="columnIndexs">列索引数组</param> 
     /// <param name="Readonly">只读属性</param> 
     /// <returns>是否处理成功</returns> 
     public bool SetReadOnlyColumns(int[] columnIndexs,bool Readonly){ 
       //获取表风格 
       try{ 
         DataGridTableStyle currGTS = GetGridTableStyle(); 
         if(currGTS==null){ 
           throw new Exception("初始化表风格出错!"); 
         } 
  
         if(columnIndexs==null||columnIndexs.Length<=0){ 
           throw new ArgumentOutOfRangeException("只读索引超出范围!"); 
         } 
  
         DataGridColumnStyle GCS; 
  
         for(int i=0;i<columnIndexs.Length;i++){ 
        
           if(columnIndexs[i]<0&&columnIndexs[i]>currGTS.GridColumnStyles.Count-1){ 
             throw new ArgumentOutOfRangeException("索引超出范围!"); 
           } 
  
           GCS = currGTS.GridColumnStyles[columnIndexs[i]]; 
           if(GCS is DataGridBoolColumn){ 
             (GCS as DataGridBoolColumn).ReadOnly = Readonly; 
           }else if(GCS is DataGridTextBoxColumn){ 
             (GCS as DataGridTextBoxColumn).ReadOnly = Readonly; 
           } 
         } 
         return true; 
       }catch{return false;} 
     } 
  
     /** <summary> 
     /// 设置列只读属性 
     /// </summary> 
     /// <param name="columnNames">列名称数组</param> 
     /// <param name="Readonly">只读属性</param> 
     /// <returns>是否处理成功</returns> 
     public bool SetReadOnlyColumns(string[] columnNames,bool Readonly){ 
       //获取表风格 
       try{ 
         DataGridTableStyle currGTS = GetGridTableStyle(); 
         if(currGTS==null){ 
           throw new Exception("初始化表风格出错!"); 
         } 
  
         if(columnNames==null||columnNames.Length<=0){ 
           throw new ArgumentOutOfRangeException("只读索引超出范围!"); 
         } 
  
         DataGridColumnStyle GCS; 
         int columnIndex =-1; 
         for(int i=0;i<columnNames.Length;i++){ 
           columnIndex = getColumnIndex(currGTS,columnNames[i]); 
           if(columnIndex==-1){ 
             throw new Exception("列名称为空或者无效!"); 
           } 
           GCS = currGTS.GridColumnStyles[columnNames[i]]; 
           if(GCS is DataGridBoolColumn){ 
             (GCS as DataGridBoolColumn).ReadOnly = Readonly; 
           }else if(GCS is DataGridTextBoxColumn){ 
             (GCS as DataGridTextBoxColumn).ReadOnly = Readonly; 
           } 
         } 
         return true; 
       }catch{return false;} 
     } 
  
     /** <summary> 
     /// 设置列属性 
     /// </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> 
     public bool SetColumn(int columnIndex,int Width,string Title,FormatIndex Format,HorizontalAlignment Align,bool Visible){ 
       try{ 
         //获取表风格 
         DataGridTableStyle currGTS = GetGridTableStyle(); 
         string MappingName= null; 
         if(currGTS==null){ 
           throw new Exception("初始化表风格出错!"); 
         } 
  
         if(columnIndex<0&&columnIndex>currGTS.GridColumnStyles.Count-1){ 
           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]; 
  
         if(GCS is DataGridTextBoxColumn){ 
           DataGridTextBoxColumn gridColumn = (GCS as DataGridTextBoxColumn); 
           switch((int)Format){ 
             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 = ""; 
         } 
  
         //隐藏字段 
         if(!Visible){ 
           GCS.Width =0; 
           GCS.HeaderText =""; 
         } 
  
         return true; 
       }catch{ 
         return false; 
       } 
     } 
     /** <summary> 
     /// 设置列属性,默认可见 
     /// </summary> 
     /// <param name="columnIndex">列索引值</param> 
     /// <param name="Width">宽度</param> 
     /// <param name="Title">标题文本</param> 
     /// <param name="Format">列格式</param> 
     /// <param name="Align">靠齐方式</param> 
     /// <returns>完成状态</returns> 
     public bool SetColumn(int columnIndex,int Width,string Title,FormatIndex Format,HorizontalAlignment Align){ 
       return SetColumn(columnIndex,Width,Title,Format,Align,true); 
     } 
     /** <summary> 
     /// 设置列属性,默认可见,默认靠齐居左 
     /// </summary> 
     /// <param name="columnIndex">列索引值</param> 
     /// <param name="Width">宽度</param> 
     /// <param name="Title">标题文本</param> 
     /// <param name="Format">列格式</param> 
     /// <returns>完成状态</returns> 
     public bool SetColumn(int columnIndex,int Width,string Title,FormatIndex Format){ 
       return SetColumn(columnIndex,Width,Title,Format,HorizontalAlignment.Left,true); 
     } 
     /** <summary> 
     /// 设置列属性,默认可见,默认靠齐居左,默认文本格式 
     /// </summary> 
     /// <param name="columnIndex">列索引值</param> 
     /// <param name="Width">宽度</param> 
     /// <param name="Title">标题文本</param> 
     /// <returns>完成状态</returns> 
     public bool SetColumn(int columnIndex,int Width,string Title){ 
       return SetColumn(columnIndex,Width,Title,FormatIndex.Text,HorizontalAlignment.Left,true); 
     } 
     /** <summary> 
     /// 设置列属性,默认可见,默认靠齐居左,默认文本格式,默认标题为影射名 
     /// </summary> 
     /// <param name="columnIndex">列索引值</param> 
     /// <param name="Width">宽度</param> 
     /// <returns>完成状态</returns> 
     public bool SetColumn(int columnIndex,int Width){ 
       return SetColumn(columnIndex,Width,"",FormatIndex.Text,HorizontalAlignment.Left,true); 
     } 
  
     /** <summary> 
     /// 设置列属性 
     /// </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> 
     public bool SetColumn(string columnName,int Width,string Title,FormatIndex Format,HorizontalAlignment Align,bool Visible){ 
       DataGridTableStyle currGTS = GetGridTableStyle(); 
       if(currGTS==null){ 
         throw new Exception("初始化表风格出错!"); 
       } 
       int columnIndex = getColumnIndex(currGTS,columnName); 
       if(columnIndex==-1){ 
         throw new Exception("列名称为空或者无效!"); 
       } 
  
       return SetColumn(columnIndex,Width,Title,Format,Align,Visible);       
     } 
     /** <summary> 
     /// 设置列属性,默认可见 
     /// </summary> 
     /// <param name="columnName">列名称</param> 
     /// <param name="Width">宽度</param> 
     /// <param name="Title">标题文本</param> 
     /// <param name="Format">列格式</param> 
     /// <param name="Align">靠齐方式</param> 
     /// <returns>完成状态</returns> 
     public bool SetColumn(string columnName,int Width,string Title,FormatIndex Format,HorizontalAlignment Align){ 
       DataGridTableStyle currGTS = GetGridTableStyle(); 
       if(currGTS==null){ 
         throw new Exception("初始化表风格出错!"); 
       } 
       int columnIndex = getColumnIndex(currGTS,columnName); 
       if(columnIndex==-1){ 
         throw new Exception("列名称为空或者无效!"); 
       } 
  
       return SetColumn(columnIndex,Width,Title,Format,Align);       
     } 
     /** <summary> 
     /// 设置列属性,默认可见,默认靠齐居左 
     /// </summary> 
     /// <param name="columnName">列名称</param> 
     /// <param name="Width">宽度</param> 
     /// <param name="Title">标题文本</param> 
     /// <param name="Format">列格式</param> 
     /// <returns>完成状态</returns> 
     public bool SetColumn(string columnName,int Width,string Title,FormatIndex Format){ 
       DataGridTableStyle currGTS = GetGridTableStyle(); 
       if(currGTS==null){ 
         throw new Exception("初始化表风格出错!"); 
       } 
       int columnIndex = getColumnIndex(currGTS,columnName); 
       if(columnIndex==-1){ 
         throw new Exception("列名称为空或者无效!"); 
       } 
  
       return SetColumn(columnIndex,Width,Title,Format);       
     } 
     /** <summary> 
     /// 设置列属性,默认可见,默认靠齐居左,默认文本格式 
     /// </summary> 
     /// <param name="columnName">列名称</param> 
     /// <param name="Width">宽度</param> 
     /// <param name="Title">标题文本</param> 
     /// <returns>完成状态</returns> 
     public bool SetColumn(string columnName,int Width,string Title){ 
       DataGridTableStyle currGTS = GetGridTableStyle(); 
       if(currGTS==null){ 
         throw new Exception("初始化表风格出错!"); 
       } 
       int columnIndex = getColumnIndex(currGTS,columnName); 
       if(columnIndex==-1){ 
         throw new Exception("列名称为空或者无效!"); 
       } 
  
       return SetColumn(columnIndex,Width,Title);       
     } 
     /** <summary> 
     /// 设置列属性,默认可见,默认靠齐居左,默认文本格式,默认标题为影射名 
     /// </summary> 
     /// <param name="columnName">列名称</param> 
     /// <param name="Width">宽度</param> 
     /// <returns>完成状态</returns> 
     public bool SetColumn(string columnName,int Width){ 
       DataGridTableStyle currGTS = GetGridTableStyle(); 
       if(currGTS==null){ 
         throw new Exception("初始化表风格出错!"); 
       } 
       int columnIndex = getColumnIndex(currGTS,columnName); 
       if(columnIndex==-1){ 
         throw new Exception("列名称为空或者无效!"); 
       } 
  
       return SetColumn(columnIndex,Width);       
     } 
   } 
 } 
  下面的代码是演示如何使用这个类: 
       OleDbConnection conn = new OleDbConnection( "Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=\"E:\\sf\\DataBasew.mdb\";Mode=Share Deny None;Jet OLEDB:Engine Type=5;Provider=\"Microsoft.Jet.OLEDB.4.0\";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;User ID=Admin;Jet OLEDB:Global Bulk Transactinotallow=1" ); 
              
       OleDbDataAdapter da = new OleDbDataAdapter("SELECT A.设备编号, b.设备名称, b.所属设备组, A.检测时间, A.气体压力, A.换算压力, A.气体湿度, A.气体温度, A.诊断代码 FR" + 
         "OM (六氟化硫数据 A LEFT OUTER JOIN 测试设备 b ON A.设备编号 = b.编号) ORDER BY b.所属设备组, A.检测时间", conn ); 
       DataSet ds = new DataSet(); 
       try { 
         da.Fill( ds, "六氟化硫数据" ); 
       } 
       catch( Exception ex ) { 
         MessageBox.Show( ex.Message ); 
       } 
  
       //这里不需要制定,因为要由风格管理类接管,并且避免dataGrid自动初始化表风格影响速度 
       //dataGrid.DataSource = ds.Tables[0]; 
  
       Grid.Service.StyleManager sm = new Grid.Service.StyleManager(); 
       sm.DataGrid = dataGrid;  //目标DataGrid 
       sm.DataSource = ds.Tables[0];  //目标DataTable 
       sm.AllowSelectedRow = true; //允许行选择 
       //设置第1列宽200,名称为“设备编号!",数据类型为数值型,局中,不隐藏 
       sm.SetColumn(0,200,"设备编号 !",Grid.Service.FormatIndex.Numeric,HorizontalAlignment.Center,true); 
       //设置第2列宽100,不制定名称“用表字段真实名称”,文本类型 
       sm.SetColumn(1,100,(string)null,Grid.Service.FormatIndex.Text,HorizontalAlignment.Center,true); 
       //设置第4列为日期时间类型 
       sm.SetColumn(3,200,(string)null,Grid.Service.FormatIndex.DateTime); 
       sm.SetReadOnlyColumns(new int[]{0,2,5},true); //只读列0,2,5 
       sm.SetReadOnlyRows(new int[]{0,4,6,8},true);//只读行0,4,6,8 
       sm.SetHeader(new Font("黑体",9f),Color.Red); //设置列头字体,黑体9号字,红色 
       sm.SetGrid("测试表格",true,false); //显示表格标题,不显示行标题 
        
       conn.Close();

希望这个类对你有所帮助。