【问题标题】:Changing Cell Padding OnLoad causing ContextSwitchDeadlock更改单元格填充 OnLoad 导致 ContextSwitchDeadlock
【发布时间】:2018-01-20 23:22:06
【问题描述】:

因此,由于在 datagridview 中使用按钮并需要使它们成为动态单元格(它们需要根据其他行要求可见或隐藏)我需要将单元格行默认样式设置为 padding(100,0,0,0 ) 实际上隐藏了按钮。

 foreach (DataGridViewRow row in dataGridPacked.Rows)
            {
            if (row.Cells["clnPackComment"].Value.ToString() != "")
                {
                dataGridPacked[row.Cells["clnreversepack"].ColumnIndex, 
                row.Index].Style.Padding = new Padding(100, 0, 0, 0);
                }
            }

现在我有 2 个表单运行它。 一个完美的作品。我已经尝试了 1 条记录,一直到 1500(最大值可能会达到 500,这是极端的)

在我的第二个表单中,我有一个不同的 sql 字符串,上面的代码在 60 秒处停顿并给出 contextswitchdeadlock 消息。

如果我删除该行,表单会正常加载(除了显示我不想要的按钮!)

我该如何调试这个原因? 我确实有两个都与索引列相关的 WHERE 子句 一个是

WHERE packeduser is null

另一个是

where packeduser is not null AND checkeduser is null

当我使用断点时,sql 似乎可以很好地加载到数据集中,但我想不通了。 有人可以就如何解决这个问题提供建议!?

【问题讨论】:

    标签: c# button datagridview padding


    【解决方案1】:

    我想通了!!

    因此,由于某种原因,填充更改(按行)导致了问题, 因此我切换到

    dataGridChecked.Columns["clnreversecheck"].DefaultCellStyle.Padding = new Padding(100, 0, 0, 0);
    

    现在这一切都很好,但在该列上运行 CELL.style 代码并不能用于填充!!

    我发现了

    row.Cells["clnreversecheck"].Style.Padding = new Padding(0, 0, 0, 0);
    

    不会覆盖填充的行或列样式!

    我做了很多试验,我不得不设置:

    row.Cells["clnreversecheck"].Style.Padding = new Padding(1, 0, 0, 0);
    

    它有效!

    所以最后通过不迭代 1000 行并更改特定列上的填充来修复停顿,并且覆盖不适用于 0 的填充,但将填充设置为 1 并覆盖它!

    也许是 C# 失败,或者你不能用 0 填充覆盖填充?

    不管怎样,它是固定的!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多