C# DataGridView列标题包含文本和复选框

C# DataGridView列标题包含文本和复选框,c#,.net,checkbox,datagridview,columnheader,C#,.net,Checkbox,Datagridview,Columnheader,对于“构建”和“发布”,我有两列复选框。我希望每个标题显示“Build[]”和“Publish[]”,其中[]是一个复选框,允许用户选择或取消选择相应列中的所有复选框优先级:如何在不创建新类或添加图像的情况下实现这一点最后手段:如果不可能,您能指导我构造适当的类吗?提前谢谢 您可以使用两个常规的复选框,并将它们添加到数据网格视图: cbx_Build.Parent = dataGridView1; cbx_Build.Location = new Point(0, 3); cbx_Build.B

对于“构建”和“发布”,我有两列复选框。我希望每个标题显示“Build[]”和“Publish[]”,其中[]是一个复选框,允许用户选择或取消选择相应列中的所有复选框优先级:如何在不创建新类或添加图像的情况下实现这一点最后手段:如果不可能,您能指导我构造适当的类吗?提前谢谢

您可以使用两个常规的
复选框
,并将它们添加到
数据网格视图

cbx_Build.Parent = dataGridView1;
cbx_Build.Location = new Point(0, 3);
cbx_Build.BackColor = SystemColors.Window;
cbx_Build.AutoSize = false;

cbx_Publish.Parent = dataGridView1;
cbx_Publish.Location = new Point(0, 3);
cbx_Publish.BackColor = SystemColors.Window;    
cbx_Publish.AutoSize = false;
要使它们位于列标题中,请使用如下代码:

dataGridView1.CellPainting += dataGridView1_CellPainting;  


void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
  if (e.ColumnIndex == BuildIndex && e.RowIndex == 0) cbx_Build.Left = e.CellBounds.Left;
  if (e.ColumnIndex == PubIndex && e.RowIndex == 0) cbx_Publish.Left = e.CellBounds.Left;
}
如果需要,使用适当的索引来满足列和偏移的要求,将它们稍微向右放置

您必须实现您的逻辑,以防止DGV中的值发生正常变化,例如在
验证事件中

更新:

这个活动可能是一个很好甚至更好的选择,因为它不会经常被调用;如果用户更改列宽后只需调整位置,至少可以:

private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
   cbx_Build.Left = dataGridView1.Columns[BuildIndex].HeaderCell.ContentBounds.Left;
   cbx_Publish.Left = dataGridView1.Columns[PubIndex].HeaderCell.ContentBounds.Left;
}

如果列也可以被删除、添加或重新排序,则这些事件也必须编写脚本:
ColumnRemoved、ColumnAdded、ColumnDisplayIndexChanged
。以上两行均可使用。

请参见“谢谢!”!目前正在尝试这个!方法中的“构建”和“发布”是什么?复选框?对不起,只是输入错误;-)我确实用了颜色。透明的,但到目前为止看起来不错!非常感谢你!如何使用Build/Publish对其进行定位,以便在调整列的大小时,复选框也随之调整?我添加了一个
AutoSize=false
,以允许独立于文本更改其宽度。不过,您需要决定需要哪一个:使用以下列调整TB的大小:
cbx_Build.Width=e.CellBounds.Width
或该列是否应与文本框一起使用:
dataGridView1.Columns[1].Width=checkBox1.Width+3将一个放在设置代码中,另一个放在单元格中。这不会改变任何东西。该复选框仍位于初始化时所在的位置。虽然我调整了列的大小,但它们仍然留在原地,而不是与相应的列一起。