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)
{
}
}