浅谈DataGridTableStyle心得

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

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


            
            Employee_lst.TableStyles.Add(dts);//最后把datatablestyle附加到datagrid上去


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



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

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

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

namespace Stock
{
    
/// <summary>
    
/// ButtonColumnStyle2 的摘要说明。
    
/// </summary>

    public class ButtonColumnStyle2 : System.Windows.Forms.DataGridColumnStyle
    
{
        
/// <summary> 
        
/// 必需的设计器变量。
        
/// </summary>

        private System.ComponentModel.Container components = null;
        
public  delegate void OnClickEventHandler(object sender,int rowIndex);
        
public event OnClickEventHandler OnClick;

        
public ButtonColumnStyle2()
        
{
            
// 该调用是 Windows.Forms 窗体设计器所必需的。
            InitializeComponent();

            
// TODO: 在 InitializeComponent 调用后添加任何初始化
            Invalidate();
            

        }


        
/// <summary> 
        
/// 清理所有正在使用的资源。
        
/// </summary>

        protected override void Dispose( bool disposing )
        
{
            
if( disposing )
            
{
                
if(components != null)
                
{
                    components.Dispose();
                }

            }

            
base.Dispose( disposing );
        }


        
组件设计器生成的代码

        
继承datagridcolumnstyle

        
private void DrawText(String Text,Font font,Graphics g,Rectangle bounds,Brush dbrush)
        
{
            
int xMargin,yMargin;
            xMargin 
= 2;
            yMargin 
= 2 ;
            
float penWidth   =  0.5f;
            
float penWidth2  =  1f;

            g.DrawLine(
new Pen(Brushes.DarkGray,penWidth),new Point(bounds.Left+xMargin,bounds.Top+yMargin),new Point(bounds.Left+xMargin,bounds.Bottom-yMargin));
            g.DrawLine(
new Pen(Brushes.DarkGray,penWidth),new Point(bounds.Right-xMargin,bounds.Top+yMargin),new Point(bounds.Left+xMargin,bounds.Top+yMargin));

            g.DrawLine(
new Pen(Brushes.DimGray,penWidth2),new Point(bounds.Left+xMargin,bounds.Bottom-yMargin),new Point(bounds.Right-xMargin,bounds.Bottom-yMargin));
            g.DrawLine(
new Pen(Brushes.DimGray,penWidth2),new Point(bounds.Right-xMargin,bounds.Top+yMargin),new Point(bounds.Right-xMargin,bounds.Bottom-yMargin));

//            g.FillRectangle(dbrush,bounds.Left+xMargin,bounds.Top+yMargin,bounds.Width-2*xMargin,bounds.Height-2*yMargin);



            PointF p 
= new PointF(bounds.Left+2,bounds.Top+5);
            StringFormat FontFormat 
= new StringFormat();
            FontFormat.Alignment 
= System.Drawing.StringAlignment.Near;

            g.DrawString(Text, font, Brushes.Black,p,FontFormat);

        }

    }

}


posted on 2004-12-13 10:24  一望无际的南  阅读(3894)  评论(1编辑  收藏  举报

导航