C# DataGridViewHeaderCell中添加的复选框的DataGridVIew刷新不正确

C# DataGridViewHeaderCell中添加的复选框的DataGridVIew刷新不正确,c#,datagridview,header,datagridviewcheckboxcell,C#,Datagridview,Header,Datagridviewcheckboxcell,我希望有人能对我的问题有所了解 我的目标是使用带有DataGridCheckBoxColumn的现有DataGridView并向其标题单元格添加一个复选框。我在研究有关StackOverflow的问题时发现了一些代码,并将其(经过一些更改)合并到我现有的代码中 下面的类是我从StackOverflow post/示例中派生的类(经过一些额外的修改): 在创建并填充了DataGridView之后,以及在运行循环以格式化现有列之后,我正在实例化这个类 我正在使用以下例程插入标题单元格: privat

我希望有人能对我的问题有所了解

我的目标是使用带有
DataGridCheckBoxColumn
的现有
DataGridView
并向其标题单元格添加一个
复选框。我在研究有关StackOverflow的问题时发现了一些代码,并将其(经过一些更改)合并到我现有的代码中

下面的类是我从StackOverflow post/示例中派生的类(经过一些额外的修改):

在创建并填充了
DataGridView
之后,以及在运行循环以格式化现有列之后,我正在实例化这个类

我正在使用以下例程插入标题单元格:

private void Add_AdvanceDist_ApproveAll_Checkbox(ref DataGridView dgvParm, string colName, string sToolTipText = "")
        {
            try
            {
                int colIndex = GetIndexForColName(dgvParm, colName);
                int firstColIdx = dgvParm.FirstDisplayedScrollingColumnIndex;
                dgvParm.FirstDisplayedScrollingColumnIndex = colIndex;
                var newCheckBoxHeaderCell = new DGVCheckBoxHeaderCell("Approve", Color.White, Color.Green);
                newCheckBoxHeaderCell.ReplaceHeaderCell(dgvParm.Columns[colIndex].HeaderCell);
                dgvParm.InvalidateCell(colIndex, 0);
                dgvParm.Columns[approvedCol].Width = 0;
                dgvParm.Refresh();
                dgvParm.FirstDisplayedScrollingColumnIndex = firstColIdx;
            }
            catch (Exception ex)
            {
            }
        }
该代码采用现有的有问题的
DataGridViewCheckBoxColumn
,并将其
HeaderCell
替换为新的
DGVCheckBoxHeaderCell
实例

到目前为止,代码似乎正常工作(因为
DataGridViewCheckBoxColumn
现在包含
DGVCheckBoxHeaderCell

然而,
DataGridView
的刷新/绘制过程中发生了一些奇怪的事情。水平滚动时,会发生以下情况:

  • 如果查看到
    DataGridViewCheckBoxColumn
    ,则
    HeaderCell
    保持静止(即不随 其余的细胞),以及
  • DataGridViewCheckBoxColumn
    从视图中消失时,
    HeaderCell
    最终消失 消失,但当
    DataGridView
    被滚动(返回到另一个方向)时
    DataGridViewCheckBoxColumn
    再次显示,标题单元格 未随后涂漆
  • 看起来是这样的:

    如果我来回滚动,
    HeaderCell
    中的效果就像一个移动的车窗,列标题在车窗内呼啸而过

    然后,当我直接单击“HeaderCell”时,它会显示以下内容:

    这是我期望自动发生的结果

    显然,这是一个细胞绘画问题。我做错了什么(或者根本没有做我应该做的)

    如有任何建议和/或见解,将不胜感激

    提前感谢,

    克里斯·弗利特伍德
    blkwebman@mindspring.com

    试试看。修改
    Paint
    方法以应用所需的样式。@dr.null这实际上对我很有效(如您所建议的,我的特定场景有一些MOD)。谢谢你的链接。试试吧。修改
    Paint
    方法以应用所需的样式。@dr.null这实际上对我很有效(如您所建议的,我的特定场景有一些MOD)。谢谢你的链接。
    private void Add_AdvanceDist_ApproveAll_Checkbox(ref DataGridView dgvParm, string colName, string sToolTipText = "")
            {
                try
                {
                    int colIndex = GetIndexForColName(dgvParm, colName);
                    int firstColIdx = dgvParm.FirstDisplayedScrollingColumnIndex;
                    dgvParm.FirstDisplayedScrollingColumnIndex = colIndex;
                    var newCheckBoxHeaderCell = new DGVCheckBoxHeaderCell("Approve", Color.White, Color.Green);
                    newCheckBoxHeaderCell.ReplaceHeaderCell(dgvParm.Columns[colIndex].HeaderCell);
                    dgvParm.InvalidateCell(colIndex, 0);
                    dgvParm.Columns[approvedCol].Width = 0;
                    dgvParm.Refresh();
                    dgvParm.FirstDisplayedScrollingColumnIndex = firstColIdx;
                }
                catch (Exception ex)
                {
                }
            }