zoukankan      html  css  js  c++  java
  • datagridview表头全选

    参与程序http://www.codeproject.com/KB/grid/CheckBoxHeaderCell.aspx 这里老外写的一个控件,他少了委托重载的一个方法。先写一个控件

    public delegate void CheckBoxClickedHandler(bool state);
            public class DataGridViewCheckBoxHeaderCellEventArgs : EventArgs
            {
                bool _bChecked;
                public DataGridViewCheckBoxHeaderCellEventArgs(bool bChecked)
                {
                    _bChecked = bChecked;
                }
                public bool Checked
                {
                    get { return _bChecked; }
                }
            }
    
    
            public class DatagridViewCheckBoxHeaderCell : DataGridViewColumnHeaderCell
            {
                Point checkBoxLocation;
                Size checkBoxSize;
                bool _checked = false;
                Point _cellLocation = new Point();
                System.Windows.Forms.VisualStyles.CheckBoxState _cbState =
                    System.Windows.Forms.VisualStyles.CheckBoxState.UncheckedNormal;
                public event CheckBoxClickedHandler OnCheckBoxClicked;
    
                public DatagridViewCheckBoxHeaderCell()
                {
                }
    
                protected override void Paint(System.Drawing.Graphics graphics,
                    System.Drawing.Rectangle clipBounds,
                    System.Drawing.Rectangle cellBounds,
                    int rowIndex,
                    DataGridViewElementStates dataGridViewElementState,
                    object value,
                    object formattedValue,
                    string errorText,
                    DataGridViewCellStyle cellStyle,
                    DataGridViewAdvancedBorderStyle advancedBorderStyle,
                    DataGridViewPaintParts paintParts)
                {
                    base.Paint(graphics, clipBounds, cellBounds, rowIndex,
                        dataGridViewElementState, value,
                        formattedValue, errorText, cellStyle,
                        advancedBorderStyle, paintParts);
                    Point p = new Point();
                    Size s = CheckBoxRenderer.GetGlyphSize(graphics,
                    System.Windows.Forms.VisualStyles.CheckBoxState.UncheckedNormal);
                    p.X = cellBounds.Location.X +
                        (cellBounds.Width / 2) - (s.Width / 2);
                    p.Y = cellBounds.Location.Y +
                        (cellBounds.Height / 2) - (s.Height / 2);
                    _cellLocation = cellBounds.Location;
                    checkBoxLocation = p;
                    checkBoxSize = s;
                    if (_checked)
                        _cbState = System.Windows.Forms.VisualStyles.
                            CheckBoxState.CheckedNormal;
                    else
                        _cbState = System.Windows.Forms.VisualStyles.
                            CheckBoxState.UncheckedNormal;
                    CheckBoxRenderer.DrawCheckBox
                    (graphics, checkBoxLocation, _cbState);
                }
    
                protected override void OnMouseClick(DataGridViewCellMouseEventArgs e)
                {
                    Point p = new Point(e.X + _cellLocation.X, e.Y + _cellLocation.Y);
                    if (p.X >= checkBoxLocation.X && p.X <=
                        checkBoxLocation.X + checkBoxSize.Width
                    && p.Y >= checkBoxLocation.Y && p.Y <=
                        checkBoxLocation.Y + checkBoxSize.Height)
                    {
                        _checked = !_checked;
                        if (OnCheckBoxClicked != null)
                        {
                            OnCheckBoxClicked(_checked);
                            this.DataGridView.InvalidateCell(this);
                        }
    
                    }
                    base.OnMouseClick(e);
                }
            
        }
    

      然后在前台做个窗体,加个datagridview控件,加个几行,注意datagirdview有编辑状态,如果只有一行又是在编辑状态,就不起作用了。当然一般全选控件不可能在编辑状态

     public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                //DataGridViewCheckBoxColumn colCB = new DataGridViewCheckBoxColumn();
                DatagridViewCheckBoxHeaderCell cbHeader = new DatagridViewCheckBoxHeaderCell();
                //colCB.HeaderCell = cbHeader;
                //dataGridView1.Columns.Add(colCB);
                cbHeader.Value = string.Empty;
                cbHeader.OnCheckBoxClicked += new CheckBoxClickedHandler(cbHeader_OnCheckBoxClicked);
    
                dataGridView1.Columns[0].HeaderCell = cbHeader;
            }
    
            private void cbHeader_OnCheckBoxClicked(bool state)
            {        
                  //这一句很重要结束编辑状态
            dgvWarn.EndEdit();
                if (dataGridView1.Rows.Count > 0)
                {
                    for (int i = 0; i < dataGridView1.Rows.Count; i++)
                    {
                        dataGridView1.Rows[i].Cells[0].Value = state;
                    }
                }
            }
        }
    

      

  • 相关阅读:
    CF 13B Letter A
    CF12D Ball
    题解 CF11C
    CF10E Greedy Change
    CF10D LCIS&&Acwing 272
    CF10C Digital Root
    yLOI2019 青原樱
    js有关时间日期的操作
    js 读取 cookie
    nginx有关.htaccess小结
  • 原文地址:https://www.cnblogs.com/Anders888/p/3569590.html
Copyright © 2011-2022 走看看