问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

datagridview 怎么在头一列加个全选?c#

发布网友 发布时间:2022-05-16 17:33

我来回答

4个回答

热心网友 时间:2023-08-15 08:34

实现方式: 给DataGirdView动态添加CheckBox列
代码:
StringBuilder sql = new StringBuilder();
sql.Append("select * from aa");
DataSet ds = db.GetDataSet(sql.ToString());
if(ds==null)
{
dataGridView3.DataSource = "";
return;
}
//添加列
DataGridViewCheckBoxColumn newcol = new DataGridViewCheckBoxColumn();
newcol.HeaderText = "选择";
dataGridView3.Columns.Insert(0, newcol);
//添加完列再绑定数据源
dataGridView3.DataSource = ds.Tables[0];

触发checkbox的CheckedChanged事件
/// <summary>
/// 全选
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
for (int i = 0; i < dataGridView3.Rows.Count; i++)
dataGridView3.Rows[i].Cells[0].Value = true;
else
for (int i = 0; i < dataGridView3.Rows.Count; i++)
dataGridView3.Rows[i].Cells[0].Value = false;
}

//添加其他类型的列(注意显示文字的设置)
第一: newedit.DefaultCellStyle.NullValue = "修改";
第二:newedit .UseColumnTextForButtonValue=true;
newedit .Text="修改";
示例:
dataGridView3.DataSource = ds.Tables[0];
DataGridViewButtonColumn newedit = new DataGridViewButtonColumn();
newedit.HeaderText = "编辑";
newedit.DefaultCellStyle.NullValue = "修改"; //列的显示文字
dataGridView3.Columns.Insert(9, newedit);//列的位置

热心网友 时间:2023-08-15 08:35

//允许datagridview一次选择多行,这个写load的事件里dgv.MultiSelect = true; 拖一个checkbox,将下面代码写在其CheckedChange事件中:if (ckbAll.Checked == true)
{
for (int i = 0; i < dgvMain.Rows.Count; i++)
{
for (int j = 0; j < dgvMain.Columns.Count; j++)
{
dgvMain[j, i].Selected = true;
}
}
}
else
{
dgvMain.ClearSelection();
}

热心网友 时间:2023-08-15 08:35

<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField>
<HeaderTemplate> <asp:CheckBox runat="server" ID="cbxall" Text="全选" /></HeaderTemplate>
<ItemTemplate>
<asp:CheckBox runat="server" ID="cbxsingle" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView> 用模板列emplateField 如上 不用BoundField

热心网友 时间:2023-08-15 08:36

恐怕这个功能不能直接完成,建议你到CSDN里看看一个重写DataGridView的完整示例代码:给你一个做好的内容:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace DataGridViewEx
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

/// <summary>
/// 加载数据
/// </summary>
private void btnLoadData_Click(object sender, EventArgs e)
{
DataTable dtTemp = new DataTable();

using (SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=sa;database=testdb;"))
{
SqlDataAdapter sa = new SqlDataAdapter("select * from userinfo", con);
sa.Fill(dtTemp);
}

this.dataGridView1.DataSource = dtTemp;
}

/// <summary>
/// 在checkbox列显示列头checkbox
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void button1_Click(object sender, EventArgs e)
{

datagridviewCheckboxHeaderCell ch = new datagridviewCheckboxHeaderCell();
ch.OnCheckBoxClicked += new datagridviewcheckboxHeaderEventHander(ch_OnCheckBoxClicked);//关联单击事件

//第三列为DataGridViewCheckBoxColumn
DataGridViewCheckBoxColumn checkboxCol = this.dataGridView1.Columns[2] as DataGridViewCheckBoxColumn;
checkboxCol.HeaderCell = ch;
checkboxCol.HeaderCell.Value = string.Empty;//消除列头checkbox旁出现的文字
}

/// <summary>
/// 单击事件
/// </summary>
private void ch_OnCheckBoxClicked(object sender, datagridviewCheckboxHeaderEventArgs e)
{
foreach (DataGridViewRow dgvRow in this.dataGridView1.Rows)
{
if (e.CheckedState)
{
dgvRow.Cells[2].Value = true;
}
else
{
dgvRow.Cells[2].Value = false;
}
}
}
}

//定义触发单击事件的委托
public delegate void datagridviewcheckboxHeaderEventHander(object sender, datagridviewCheckboxHeaderEventArgs e);

//定义包含列头checkbox选择状态的参数类
class datagridviewCheckboxHeaderEventArgs : EventArgs
{
private bool checkedState = false;

public bool CheckedState
{
get { return checkedState; }
set { checkedState = value; }
}
}

//定义继承于DataGridViewColumnHeaderCell的类,用于绘制checkbox,定义checkbox鼠标单击事件
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)
{

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;

//获取列头checkbox的选择状态
datagridviewCheckboxHeaderEventArgs ex = new datagridviewCheckboxHeaderEventArgs();
ex.CheckedState = _checked;

object sender = new object();//此处不代表选择的列头checkbox,只是作为参数传递。应该列头checkbox是绘制出来的,无法获得它的实例

if (OnCheckBoxClicked != null)
{
OnCheckBoxClicked(sender, ex);//触发单击事件
this.DataGridView.InvalidateCell(this);
}

}
base.OnMouseClick(e);
}

}

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
冠状病毒酒精消毒怎么使用 袁咏仪主演的真爱之百万新娘哪个网站可以看 ...方便的话告诉我结局怎么样。陈玉是不是死了 冉冉东升可以组什么句子 求我姓冉的专属句子 弹弹堂高手之路全部过完给多少强化石 百度弹弹堂2里面的《高手之路高级高抛打法(高级)》《高手之路高级高差训 ... 弹弹堂工厂3怎么打 弹弹堂高手之路的任务怎么触发的 腹肌练习计划 Winform datagridview checkbox全选问题 winform datagridview怎么选中多行 ()不属于网络信息安全的范畴 A、信息传输安全 B、网络访问的安全认证和授权 C、身份认证 D、知识产权 为什么说:“不主动找你的人,就别再联系了”? 蓝牙怎么打电话 炒鞋是怎么回事? 炒鞋有风险 有暴涨就有暴跌,如何看待如今“炒鞋”的现象? 请教摄影爱好者一个问题——室外拍集体照穿什么颜色的衣服好看?_百度... 摄影中什么是颜色搭配?请解释的详细一点,谢谢! 国货球鞋出现“炒鞋热”,你如何看待炒鞋热蔓延至国货的现象? 像炒股一样炒鞋都是骗人的吗? 对于炒鞋现象如何理解其中的价格形成机制? 苹果7plusa1661移动是不是不能放联通卡? 安装office plus 2010时总是显示错误,不能安装怎么办?? iPhone 6s plus 开了热点后别人搜不到,怎么回事? 一双李宁鞋炒到快五万,为什么总有人炒鞋? 苹果6plus里面的自带铃声有种是苹果手机所有铃声合成的铃声叫什么,哪里能找到 找一个microsoft office 的密钥,跪求,急,谢谢 就像C语言有c primer plus,c++有c++ primer之类的广为流传的基础书,jav 不不光是想要UI设计我想把我的设计出来的UI界面变成真正的App让他能在手机上运行是不是要学jav 请问,C#里DataGridView控件上添加CheckBox不能全部选中,该怎么解决? 板溪小学排练的,音乐是这是广厂美丽的小世界。 在winform中dataGridView鼠标一次选中一行数据? c#winform中,DataGridView的选择列(DataGridViewCheckBoxColumn)中... c# 如何实现点击全选选中所有dgv中的记录 有哪位知道Winform中 datagridview多选是怎么实现的 C# datagridview 全选与全不选。。。 小班社会活动《慢慢变老》教案 winform datagridviewcheckboxcolumn 设置为只能选中一行,不能多选。 Winform中的GridView如何实现按住Ctrl选中多行? C# 怎么判断 DataGridView checkbox是否为全选 手机qq管家的上网流量限额是什么意思 可以超过吗 先拜谢哦 C#datagridview使用shift键选中所有行 我的老师作文500~600字的,要夹叙夹议,急急急,帮帮忙啊 C#datagridview使用shift键选中所有行?怎么做? C#winform中的 dataGridView 鼠标点行首时选中整行,点击单元格时 选中单元格,如图: 腾讯手机管家如何恢复软件的上网权限 winform中datagridview中的checkbox选中问题 SHE的成员红极一时,如果用现在的眼光来看,SHE里谁的颜值最高? 伴娘也可以不化妆吗?