c # Selección múltiple de columna de casilla de verificación de aumento de encabezado de columna Datagirdview

这 是 类 的 代码 :
delegado público void CheckBoxClickedHandler (estado bool);
clase pública DataGridViewCheckBoxHeaderCellEventArgs: EventArgs
{
bool _bChecked;
public DataGridViewCheckBoxHeaderCellEventArgs (bool bChecked)
{
_bChecked = bChecked;
}
public bool Checked
{
get {return _bChecked; }
}
}
clase DatagridViewCheckBoxHeaderCell: DataGridViewColumnHeaderCell
{
Punto checkBoxLocation;
Tamaño checkBoxSize;
bool _checked = falso;
Point _cellLocation = new Point ();
System.Windows.Forms.VisualStyles.CheckBoxState _cbState =
System.Windows.Forms.VisualStyles.CheckBoxState.UncheckedNormal;
evento público 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);
    }     
}


DataGridViewCheckBoxColumn será añadido a la cabecera de la columna después de la instanciación. ColCB = nuevo DataGridViewCheckBoxColumn ();
DatagridViewCheckBoxHeaderCell cbHeader = new DatagridViewCheckBoxHeaderCell ();
colCB.HeaderCell = cbHeader;
datagridview1.Columns.Add (colCB);
cbedHeader (NewCheckBoxClickHandler) cbHeader_OnCheckBoxClicked);
1. Solo necesitamos definir un DataGridViewCheckBoxColumn.
2. Luego defina un evento CheckboxClicked para la casilla de verificación de cada fila.
Programa de prueba
  para crear un proyecto Winform, agregar un control de vista de cuadrícula de datos, datos de inicialización predeterminados de varias líneas. Nota: datagirdview tiene estado de edición, si hay una fila de datos en estado de edición, esta fila se edita.
  La solución es agregar una llamada a EndEdit () en el método de enlace de eventos.
Form1 de clase parcial pública: Form
{
Form1 público ()
{
InitializeComponent ();

        InitDtSource();
    }

    private void cbHeader_OnCheckBoxClicked(bool state)
    {
        //这一句很重要结束编辑状态
        dgInfo.EndEdit();
        dgInfo.Rows.OfType<DataGridViewRow>().ToList().ForEach(t => t.Cells[0].Value = state);
    }

    private void InitDtSource()
    {
        try
        {
            var _dtSource = new DataTable();
            //1、添加列
            _dtSource.Columns.Add("姓名", typeof(string)); //数据类型为 文本
            _dtSource.Columns.Add("身份证号", typeof(string)); //数据类型为 文本
            _dtSource.Columns.Add("时间", typeof(string)); //数据类型为 文本
            _dtSource.Columns.Add("地点", typeof(string)); //数据类型为 文本

            for (int i = 0; i < 10; i++)
            {
                DataRow drData = _dtSource.NewRow();
                drData[0] = "test" + i;
                drData[1] = "35412549554521263" + i;
                drData[2] = "2017-05-21 10:55:21";
                drData[3] = "北京市";
                _dtSource.Rows.Add(drData);
            }

            dgInfo.DataSource = _dtSource;

            InitColumnInfo();
        }
        catch (Exception ex)
        {

        }
    }

    private void InitColumnInfo()
    {
        int index = 0;

        DataGridViewCheckBoxColumn colCB = new DataGridViewCheckBoxColumn();
        DatagridViewCheckBoxHeaderCell cbHeader = new DatagridViewCheckBoxHeaderCell();
        colCB.HeaderCell = cbHeader;
        colCB.HeaderText = "全选";
        cbHeader.OnCheckBoxClicked += new CheckBoxClickedHandler(cbHeader_OnCheckBoxClicked);
        dgInfo.Columns.Insert(index, colCB);


        index++;
        dgInfo.Columns[index].HeaderText = "姓名";
        dgInfo.Columns[index].Width = 90;

        index++;
        dgInfo.Columns[index].HeaderText = "身份证号";
        dgInfo.Columns[index].Width = 120;

        index++;
        dgInfo.Columns[index].HeaderText = "时间";
        dgInfo.Columns[index].Width = 150;

        index++;
        dgInfo.Columns[index].HeaderText = "地点";
        dgInfo.Columns[index].Width = 100;

        System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
        dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;//211, 223, 240
        dataGridViewCellStyle2.ForeColor = System.Drawing.Color.Blue;
        dataGridViewCellStyle2.SelectionForeColor = System.Drawing.Color.Blue;
        dgInfo.Columns[index].DefaultCellStyle = dataGridViewCellStyle2;
    }
}

Lugar de reimpresión: https://www.cnblogs.com/zhangweizhong/p/6885507.html
Lugar de descarga del programa: https://download.csdn.net/download/hello_mr_anan/10629149
Pro-test disponibleEscriba la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/hello_mr_anan/article/details/82113070
Recomendado
Clasificación