国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Winform中DatagridView 表頭實現(xiàn)一個加上一個checkBox,實現(xiàn)全選選項功能

這篇具有很好參考價值的文章主要介紹了Winform中DatagridView 表頭實現(xiàn)一個加上一個checkBox,實現(xiàn)全選選項功能。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實現(xiàn)效果

點擊checkBox1或者直接在第一列列表頭點擊即可實現(xiàn)
Winform中DatagridView 表頭實現(xiàn)一個加上一個checkBox,實現(xiàn)全選選項功能,c# 學習,c#,信息可視化

代碼實現(xiàn)

我的datagridview叫dgv
Winform中DatagridView 表頭實現(xiàn)一個加上一個checkBox,實現(xiàn)全選選項功能,c# 學習,c#,信息可視化
我在datagridview已經(jīng)默認添加了一個DataGridViewCheckBoxColumn,勾選時value為1,不勾選時value為0
Winform中DatagridView 表頭實現(xiàn)一個加上一個checkBox,實現(xiàn)全選選項功能,c# 學習,c#,信息可視化

第一種通過可視化拖動一個checkBox來實現(xiàn)

拖動組件,然后綁定事件
Winform中DatagridView 表頭實現(xiàn)一個加上一個checkBox,實現(xiàn)全選選項功能,c# 學習,c#,信息可視化
點擊事件
Winform中DatagridView 表頭實現(xiàn)一個加上一個checkBox,實現(xiàn)全選選項功能,c# 學習,c#,信息可視化
Winform中DatagridView 表頭實現(xiàn)一個加上一個checkBox,實現(xiàn)全選選項功能,c# 學習,c#,信息可視化
事件代碼:

		/// <summary>
        /// checkbox1的點擊事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void checkSelectAll_CheckedChanged(object sender, EventArgs e)
        {
            if (checkSelectAll.Checked)
            {
                foreach (DataGridViewRow dgvRow in this.dgv.Rows)
                {
                    dgvRow.Cells["dataGridViewCheckBoxColumn1"].Value = true;
                }
            }
            else
            {
                foreach (DataGridViewRow dgvRow in this.dgv.Rows)
                {
                    dgvRow.Cells["dataGridViewCheckBoxColumn1"].Value = false;
                }
            }

        }

第二種,自定義checkBox,添加到列頭

這種需要自己弄一個DataGridViewCheckBoxColumn
文件位置
Winform中DatagridView 表頭實現(xiàn)一個加上一個checkBox,實現(xiàn)全選選項功能,c# 學習,c#,信息可視化

詳細代碼
==DatagridviewCheckboxHeaderCell ==

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WindowsFormsApp20230728.Properties;

namespace WindowsFormsApp20230728
{
    //定義觸發(fā)單擊事件的委托
    public delegate void DatagridviewcheckboxHeaderEventHander(object sender, DatagridviewCheckboxHeaderEventArgs e);

    //定義繼承于DataGridViewColumnHeaderCell的類,用于繪制checkbox,定義checkbox鼠標單擊事件
    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 DatagridviewcheckboxHeaderEventHander OnCheckBoxClicked;
        
        
 
        //繪制列頭checkbox
        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) - 1;//列頭checkbox的X坐標
            p.Y = cellBounds.Location.Y +
                (cellBounds.Height / 2) - (s.Height / 2);//列頭checkbox的Y坐標
            _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);
        }
        /// <summary>
        /// 點擊列頭checkbox單擊事件
        /// </summary>
        protected override void OnMouseClick(DataGridViewCellMouseEventArgs e)
        {
            var 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;
                //獲取列頭checkbox的選擇狀態(tài)
                DatagridviewCheckboxHeaderEventArgs ex = new DatagridviewCheckboxHeaderEventArgs { CheckedState = _checked };
                
                var sender = new object();//此處不代表選擇的列頭checkbox,只是作為參數(shù)傳遞。應(yīng)該列頭checkbox是繪制出來的,無法獲得它的實例
                if (OnCheckBoxClicked != null)
                {
                    OnCheckBoxClicked(sender, ex);//觸發(fā)單擊事件
                    this.DataGridView.InvalidateCell(this);
                }
            }
            base.OnMouseClick(e);
        }
    }
}

==DatagridviewCheckboxHeaderEventArgs ==

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace WindowsFormsApp20230728
{
    //定義包含列頭checkbox選擇狀態(tài)的參數(shù)類
    public class DatagridviewCheckboxHeaderEventArgs : EventArgs
    {
        public DatagridviewCheckboxHeaderEventArgs()
        {
            CheckedState = false;
        }
        public bool CheckedState
        {
            get { return _CheckedState; }

            set { _CheckedState = value; }
        }
        
        private bool _CheckedState;
    }
}

實現(xiàn)位置,均在Form2類中
Winform中DatagridView 表頭實現(xiàn)一個加上一個checkBox,實現(xiàn)全選選項功能,c# 學習,c#,信息可視化

Winform中DatagridView 表頭實現(xiàn)一個加上一個checkBox,實現(xiàn)全選選項功能,c# 學習,c#,信息可視化
代碼:

		public Form2()
        {
            InitializeComponent();
            //InitColumnInfo();
            #region  自定義組件開始
            //自定義組件實現(xiàn)
            var ch = new DatagridviewCheckboxHeaderCell();
            ch.OnCheckBoxClicked += new DatagridviewcheckboxHeaderEventHander(ch_OnCheckBoxClicked);
            var checkboxCol = this.dgv.Columns[0] as DataGridViewCheckBoxColumn;
            checkboxCol.HeaderCell = ch;
            checkboxCol.HeaderCell.Value = string.Empty;
         }

注意其中dgv.EndEdit(); 失去焦點操作,如果沒有這個,你焦點所在checkBox不會勾選

		//去除datagridview列表頭排序
        //    foreach (DataGridViewColumn item in dgv.Columns)
        //        item.SortMode = DataGridViewColumnSortMode.NotSortable;
        /// <summary>
        /// 單擊事件
        /// </summary>
        private void ch_OnCheckBoxClicked(object sender, DatagridviewCheckboxHeaderEventArgs e)
        {
            //失去焦點操作
            dgv.EndEdit();
            
            //Console.WriteLine(e.CheckedState.ToString());
            
            //選中事件操作
            if (e.CheckedState)
            {
                for(int i = 0; i < dgv.Rows.Count; i++)
                {
                    dgv.Rows[i].Cells[0].Value = 1;
                }
                //foreach (DataGridViewRow dgvRow in this.dgv.Rows)
                //{
                //    dgvRow.Cells["dataGridViewCheckBoxColumn1"].Value = true;
                //}
            }
            else
            {
                for (int i = 0; i < dgv.Rows.Count; i++)
                {
                    dgv.Rows[i].Cells[0].Value = 0;
                }
                //foreach (DataGridViewRow dgvRow in this.dgv.Rows)
                //{
                //    dgvRow.Cells["dataGridViewCheckBoxColumn1"].Value = 0;
                //}
            }
            
        }

第三種,不添加DataGridViewCheckBoxColumn,直接以自定義的形式形成一列的checkBox

和第二種相比,就是把DataGridViewCheckBoxColumn從DataGridView中刪除,然后public Form2()自定義組件實現(xiàn)代碼改一下,其他都是一樣的

也就是把這一串換成下面的即可

//自定義組件實現(xiàn)
var ch = new DatagridviewCheckboxHeaderCell();
ch.OnCheckBoxClicked += new DatagridviewcheckboxHeaderEventHander(ch_OnCheckBoxClicked);
var checkboxCol = this.dgv.Columns[0] as DataGridViewCheckBoxColumn;
checkboxCol.HeaderCell = ch;
checkboxCol.HeaderCell.Value = string.Empty;

if (!this.DesignMode){
       DatagridviewCheckboxHeaderCell cbHeader = new DatagridviewCheckboxHeaderCell();
       cbHeader.OnCheckBoxClicked += new DatagridviewcheckboxHeaderEventHander(ch_OnCheckBoxClicked);
       DataGridViewCheckBoxColumn checkboxCol = new DataGridViewCheckBoxColumn();
       checkboxCol.HeaderCell = cbHeader;
       checkboxCol.HeaderCell.Value = string.Empty;
       this.dgv.Columns.Insert(0,checkboxCol);
}

第三種實現(xiàn)的是類屬于java面向?qū)ο缶幊痰男Ч诙N則是自定義組件進行添加的效果

參考文章

C# Winform中DataGridView的DataGridViewCheckBoxColumn CheckBox選中判斷
關(guān)于Winform中DatagridView 表頭checkBox全選選項框總結(jié)
DataGridView EndEdit()方法
c# winform獲取gridview數(shù)據(jù)

精髓概括

C# 自定義控件實現(xiàn)ChackBox的Checked效果

  1. 創(chuàng)建一個類,繼承自System.Windows.Forms.Control,實現(xiàn)自定義控件;

  2. 在類中重寫OnPaint方法,繪制CheckBox的外觀;

  3. 在類中重寫OnMouseDown方法,實現(xiàn)鼠標點擊時CheckBox的Checked狀態(tài)的改變;

  4. 在類中定義一個Checked屬性,用于獲取或設(shè)置CheckBox的Checked狀態(tài);

  5. 在類中定義一個CheckedChanged事件,用于在CheckBox的Checked狀態(tài)改變時觸發(fā);

  6. 在類中重寫OnClick方法,實現(xiàn)CheckBox的Checked狀態(tài)改變時觸發(fā)CheckedChanged事件。

配套功能實現(xiàn)

Winform中DatagridView 加上 ContextMenuStrip 實現(xiàn)右鍵點擊展示菜單,且可以獲取數(shù)據(jù)(在沒數(shù)據(jù)的地方不顯示右鍵菜單,以及右鍵焦點進行改變),詳情見該欄上一篇文章文章來源地址http://www.zghlxwxcb.cn/news/detail-639830.html

到了這里,關(guān)于Winform中DatagridView 表頭實現(xiàn)一個加上一個checkBox,實現(xiàn)全選選項功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • C# Winform DataGridView 數(shù)據(jù)刷新問題

    C# Winform DataGridView 數(shù)據(jù)刷新問題

    目錄 一、問題 二、創(chuàng)建項目 三、綁定空的數(shù)據(jù)源 四、綁定有數(shù)據(jù)的數(shù)據(jù)源 五、修改綁定的數(shù)據(jù)源 六、解決數(shù)據(jù)源刷新問題 七、解決刷新數(shù)據(jù)界面閃爍 DataGridView 是比較常用的表格控件,在 DataGridView 中顯示數(shù)據(jù),?一般使用 dataGridView1.DataSource = 數(shù)據(jù)源,來綁定數(shù)據(jù),數(shù)據(jù)

    2024年02月12日
    瀏覽(19)
  • C#Winform的DataGridView控件使用詳解2—DataGridView表格樣式設(shè)置及表格操作

    C#Winform的DataGridView控件使用詳解2—DataGridView表格樣式設(shè)置及表格操作

    在展示和處理二維數(shù)據(jù)時,我們常常會想起Excel。但是使用Excel自帶的各種函數(shù)處理較為繁瑣的步驟時顯得略顯吃力,如果使用Excel自帶宏編程,可能會對VB語言不甚熟悉或是感覺不nice。這個時候,熟悉C#編程語言的你,就需要用到DataGridView控件,設(shè)計一款二維數(shù)據(jù)處理利器。

    2024年02月03日
    瀏覽(24)
  • C# Winform DataGridView 控件和 DataTable

    C# Winform DataGridView 控件和 DataTable

    目錄 一、概述 二、DataTable 的用法 1.創(chuàng)建表和列 2.添加行 3.取值和賦值 4.刪除行 5.遍歷 DataTable 6.判斷 DataTable 列中是否存在某個值 7.設(shè)置主鍵 8.獲取?DataRow 所在的行號 9.DataTable 轉(zhuǎn)換為 List 10.將 List 轉(zhuǎn)?DataTable 三、DataGridView 的用法 1.綁定數(shù)據(jù) 2.獲取綁定的數(shù)據(jù)源 3.獲取 / 設(shè)置

    2024年02月10日
    瀏覽(29)
  • 【el-table 表頭自定義全選列】

    【el-table 表頭自定義全選列】

    具體效果

    2024年01月25日
    瀏覽(12)
  • C# winform 將excel表格導(dǎo)入datagridView 的方式

    方式一: 方式二:

    2024年02月05日
    瀏覽(17)
  • C#Winform中的DataGridView的自動調(diào)整列寬設(shè)置

    C#Winform中的DataGridView的自動調(diào)整列寬設(shè)置屬性為AutoSizeColumnMode 的枚舉值如下: 1、AllCells 調(diào)整列寬,以適合該列中的所有單元格的內(nèi)容,包括標題單元格。?? 2、AllCellsExceptHeader 調(diào)整列寬,以適合該列中的所有單元格的內(nèi)容,不包括標題單元格。?? 3、ColumnHeader 調(diào)整列寬,以

    2024年02月13日
    瀏覽(20)
  • 設(shè)置el-table表頭全選框隱藏或禁用

    設(shè)置el-table表頭全選框隱藏或禁用

    需求:設(shè)置el-table表頭的多選框隱藏或禁用,網(wǎng)上找的均造成即時生效,但刷新頁面時頁面會卡頓。 ? 方法1: 直接使用css(scoped中)設(shè)置: 方法2: 給el-table設(shè)置表頭屬性header-cell-class-name css部分(scoped): 以上2種方法可隱藏全選框,效果如下: ? ?方法3: 使用el-table的sele

    2024年02月11日
    瀏覽(22)
  • 使用雙緩沖技術(shù)解決winform窗體控件卡頓(dataGridView加載數(shù)據(jù)緩慢)

    使用雙緩沖技術(shù)解決winform窗體控件卡頓(dataGridView加載數(shù)據(jù)緩慢)

    在做C/S項目中,做好的窗體出現(xiàn)了頁面加載控件緩慢,放大、縮小窗體之后,窗體加載卡頓,以及數(shù)據(jù)渲染緩慢。 百度介紹:我們看電視時,看到的屏幕稱為OSD層,也就是說,只有在OSD層上顯示圖像我們才能看到。現(xiàn)在,我需要創(chuàng)建一個虛擬的、看不見但是可以在上面畫圖(

    2024年02月02日
    瀏覽(20)
  • C# Winform中在DataGridView中添加Button按鈕,操作Button按鈕

    .Net的DataGridView控件中,提供了一種列的類型,叫 DataGridViewButtonColumn ,這種列類型是展示為一個 按鈕,可以給button賦予相應(yīng)的text,并且,此button可以用來做處理事件的判斷依據(jù)。 DataGridViewButtonColumn,雖然在UI展現(xiàn)上,是一個BUTTON的樣子,但是,它的實際形態(tài),并不是傳統(tǒng)意

    2024年02月07日
    瀏覽(23)
  • C#Winform中DataGridView控件根據(jù)鼠標左右鍵獲取單元格值或者行列

    有多種方法可以獲取單元格的值或者行列,此處選用了兩種方式去獲取分別用了CurrentCell方法和Rows[].Cells[]的方法去獲取行列值 鼠標左鍵獲取單獨行列值 此處獲取左鍵行列值的觸發(fā)條件是表格中數(shù)據(jù)變化獲取,對應(yīng)DataGridView事件CellValueChanged。 用方法CurrentCell中的Value,RowIndex

    2024年02月09日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包