在开发数据DataGrid显示时候通常会遇到自定义DataGrid的列显示,
比如经常会提到的,
如何单击一行显示某种颜色
如何点击到某个单元格不显示编辑框
如何自定义一列的显示,比如本来有个标记位flag为0,本行背景显示为白色等等,
此类问题归根到底还是要靠 DataGridTableStyle 和 System.Windows.Forms.DataGridColumnStyle 这两个类来完成.

DataGridColumnStyle  是定义一列显示的样式
DataGridTableStyle  是定义整个datagrid的实现样式.
浅谈DataGridTableStyle心得dts.GridColumnStyles.Clear();//将column的style清除
浅谈DataGridTableStyle心得            
浅谈DataGridTableStyle心得            
for (int i=0;i<Boxs.Count;i++)
{
浅谈DataGridTableStyle心得                dts.GridColumnStyles.Add((DataGridTextBoxColumn)Boxs[i]);//把所有的columnstyle附加上去
浅谈DataGridTableStyle心得            }

浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得            
浅谈DataGridTableStyle心得            Employee_lst.TableStyles.Add(dts);//最后把datatablestyle附加到datagrid上去


还要注意每一个columnstryl都要对应到列,否则会出错.
DatatableStyle也要对应到表.
xxx.MappingName=  yyy;



我们来自己创建一个DataGridColumnStyle 的子类来:
这个子类能够解决:
如何单击一行显示某种颜色
如何点击到某个单元格不显示编辑框

其实这个子类很简单,主要注意看paint是如何完成的.

浅谈DataGridTableStyle心得using System;
浅谈DataGridTableStyle心得
using System.Collections;
浅谈DataGridTableStyle心得
using System.ComponentModel;
浅谈DataGridTableStyle心得
using System.Drawing;
浅谈DataGridTableStyle心得
using System.Data;
浅谈DataGridTableStyle心得
using System.Windows.Forms;
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得
namespace Stock
{

浅谈DataGridTableStyle心得    
/// ButtonColumnStyle2 的摘要说明。
浅谈DataGridTableStyle心得    
/// </summary>
浅谈DataGridTableStyle心得    public class ButtonColumnStyle2 : System.Windows.Forms.DataGridColumnStyle
{
 
浅谈DataGridTableStyle心得        
/// 必需的设计器变量。
浅谈DataGridTableStyle心得        
/// </summary>
浅谈DataGridTableStyle心得        private System.ComponentModel.Container components = null;
浅谈DataGridTableStyle心得        
public  delegate void OnClickEventHandler(object sender,int rowIndex);
浅谈DataGridTableStyle心得        
public event OnClickEventHandler OnClick;
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        
public ButtonColumnStyle2()
{
浅谈DataGridTableStyle心得            
// 该调用是 Windows.Forms 窗体设计器所必需的。
浅谈DataGridTableStyle心得
            InitializeComponent();
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得            
// TODO: 在 InitializeComponent 调用后添加任何初始化
浅谈DataGridTableStyle心得
            Invalidate();
浅谈DataGridTableStyle心得            
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        }

浅谈DataGridTableStyle心得
 
浅谈DataGridTableStyle心得        
/// 清理所有正在使用的资源。
浅谈DataGridTableStyle心得        
/// </summary>
浅谈DataGridTableStyle心得        protected override void Dispose( bool disposing )
{
浅谈DataGridTableStyle心得            
if( disposing )
{
浅谈DataGridTableStyle心得                
if(components != null)
{
浅谈DataGridTableStyle心得                    components.Dispose();
浅谈DataGridTableStyle心得                }

浅谈DataGridTableStyle心得            }

浅谈DataGridTableStyle心得            
base.Dispose( disposing );
浅谈DataGridTableStyle心得        }

浅谈DataGridTableStyle心得

 
浅谈DataGridTableStyle心得        
/// 设计器支持所需的方法 - 不要使用代码编辑器 
浅谈DataGridTableStyle心得        
/// 修改此方法的内容。
浅谈DataGridTableStyle心得        
/// </summary>
浅谈DataGridTableStyle心得        private void InitializeComponent()
{
浅谈DataGridTableStyle心得            components 
= new System.ComponentModel.Container();
浅谈DataGridTableStyle心得        }

浅谈DataGridTableStyle心得        
#endregion
浅谈DataGridTableStyle心得

浅谈DataGridTableStyle心得        
protected  override void Abort(int rowNum)
{
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        }

浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        
浅谈DataGridTableStyle心得        
protected  override bool Commit(CurrencyManager dataSource, int rowNum)
{
浅谈DataGridTableStyle心得            
return true;
浅谈DataGridTableStyle心得        }

浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        
//        protected  override void Edit(CurrencyManager source, int rowNum, Rectangle bounds, bool readOnly)
浅谈DataGridTableStyle心得        
//        {
浅谈DataGridTableStyle心得        
//            base.Edit (source, rowNum, bounds, readOnly);
浅谈DataGridTableStyle心得        
//        }
浅谈DataGridTableStyle心得        
//
浅谈DataGridTableStyle心得        
//        
浅谈DataGridTableStyle心得        
//
浅谈DataGridTableStyle心得        
//        protected  override void Edit(CurrencyManager source, int rowNum, Rectangle bounds, bool readOnly, string instantText)
浅谈DataGridTableStyle心得        
//        {
浅谈DataGridTableStyle心得        
//            
浅谈DataGridTableStyle心得        
//            //base.Edit (source, rowNum, bounds, readOnly, instantText);
浅谈DataGridTableStyle心得        
//        }
浅谈DataGridTableStyle心得        
//
浅谈DataGridTableStyle心得
        protected  override void Edit(CurrencyManager source, int rowNum, Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
{
浅谈DataGridTableStyle心得            
浅谈DataGridTableStyle心得        }

浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得

浅谈DataGridTableStyle心得        
protected  override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum)
{
浅谈DataGridTableStyle心得            
浅谈DataGridTableStyle心得        }

浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        
protected  override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, bool alignToRight)
{
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        }

浅谈DataGridTableStyle心得        
protected  override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight)
{
浅谈DataGridTableStyle心得        
浅谈DataGridTableStyle心得            Brush dbrush 
= new SolidBrush(System.Drawing.Color.FromArgb(((byte)230), ((byte)236), ((byte)238))); 
浅谈DataGridTableStyle心得            
int m_CurrentRow = this.DataGridTableStyle.DataGrid.CurrentRowIndex; 
浅谈DataGridTableStyle心得            
if (m_CurrentRow == rowNum) 

浅谈DataGridTableStyle心得                g.FillRectangle(dbrush, bounds); 
浅谈DataGridTableStyle心得            }
 
浅谈DataGridTableStyle心得            
else 

浅谈DataGridTableStyle心得                g.FillRectangle(Brushes.White, bounds); 
浅谈DataGridTableStyle心得            }
 
浅谈DataGridTableStyle心得            Font font 
= new Font("宋体",9);
浅谈DataGridTableStyle心得            DrawText(
"Assign Stock",font,g,bounds,dbrush);
浅谈DataGridTableStyle心得            
if(OnClick!=null)
浅谈DataGridTableStyle心得                OnClick(
this,m_CurrentRow);
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得            
浅谈DataGridTableStyle心得            
//base.Paint (g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
浅谈DataGridTableStyle心得
        }
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        
#endregion
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        
protected  override int GetPreferredHeight(Graphics g, object value)
{
浅谈DataGridTableStyle心得            
return 20;
浅谈DataGridTableStyle心得        }

浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        
protected  override Size GetPreferredSize(Graphics g, object value)
{
浅谈DataGridTableStyle心得            
return new Size ();
浅谈DataGridTableStyle心得        }

浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        
protected  override int GetMinimumHeight()
{
浅谈DataGridTableStyle心得            
return 0;
浅谈DataGridTableStyle心得        }

浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        
protected override void SetDataGrid(DataGrid value)
{
浅谈DataGridTableStyle心得            
base.SetDataGrid (value);
浅谈DataGridTableStyle心得        }

浅谈DataGridTableStyle心得        
#endregion
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        
private void DrawText(String Text,Font font,Graphics g,Rectangle bounds,Brush dbrush)
{
浅谈DataGridTableStyle心得            
int xMargin,yMargin;
浅谈DataGridTableStyle心得            xMargin 
= 2;
浅谈DataGridTableStyle心得            yMargin 
= 2 ;
浅谈DataGridTableStyle心得            
float penWidth   =  0.5f;
浅谈DataGridTableStyle心得            
float penWidth2  =  1f;
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得            g.DrawLine(
new Pen(Brushes.DarkGray,penWidth),new Point(bounds.Left+xMargin,bounds.Top+yMargin),new Point(bounds.Left+xMargin,bounds.Bottom-yMargin));
浅谈DataGridTableStyle心得            g.DrawLine(
new Pen(Brushes.DarkGray,penWidth),new Point(bounds.Right-xMargin,bounds.Top+yMargin),new Point(bounds.Left+xMargin,bounds.Top+yMargin));
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得            g.DrawLine(
new Pen(Brushes.DimGray,penWidth2),new Point(bounds.Left+xMargin,bounds.Bottom-yMargin),new Point(bounds.Right-xMargin,bounds.Bottom-yMargin));
浅谈DataGridTableStyle心得            g.DrawLine(
new Pen(Brushes.DimGray,penWidth2),new Point(bounds.Right-xMargin,bounds.Top+yMargin),new Point(bounds.Right-xMargin,bounds.Bottom-yMargin));
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得
//            g.FillRectangle(dbrush,bounds.Left+xMargin,bounds.Top+yMargin,bounds.Width-2*xMargin,bounds.Height-2*yMargin);
浅谈DataGridTableStyle心得

浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得            PointF p 
= new PointF(bounds.Left+2,bounds.Top+5);
浅谈DataGridTableStyle心得            StringFormat FontFormat 
= new StringFormat();
浅谈DataGridTableStyle心得            FontFormat.Alignment 
= System.Drawing.StringAlignment.Near;
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得            g.DrawString(Text, font, Brushes.Black,p,FontFormat);
浅谈DataGridTableStyle心得
浅谈DataGridTableStyle心得        }

浅谈DataGridTableStyle心得    }

浅谈DataGridTableStyle心得}

浅谈DataGridTableStyle心得

相关文章: