【问题标题】:DataGridView rows can't change their background color at the initialization stageDataGridView 行在初始化阶段无法更改其背景颜色
【发布时间】:2010-08-26 11:41:17
【问题描述】:

我有下一个问题: TabControl 具有三个 TabPage。每个 TabPage 都有自己的 DataGridView。在“Enter”事件中,某些行会更改其背景颜色。 当表单开始初始化时,会调用改变颜色的函数。但是 DataGridView 行有它们的默认背景(背景颜色没有改变)。如果我单击另一个 TabPage,然后返回到第一个 TabPage,则再次调用该函数并更改背景。那么,为什么它不会在初始化阶段第一次发生(该函数被调用,但行不改变它们的颜色)。如何强制 DataGridView 在初始化阶段更改其行的背景颜色? 非常感谢!

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    我对@9​​87654321@ 有同样的问题,似乎TabControl 存在一个错误,即当它有多个选项卡时cellstyles 使用代码创建仅适用于第一个选项卡的 DataGridView,因此您可以将 DataGridView 移动到第一个选项卡,或者您可以使用 TabControl 的 SelectedIndexChanged 事件并将您的样式代码放入此事件中。

    【讨论】:

      【解决方案2】:

      你是如何改变颜色的?您可能希望查看 CellFormatting 事件,以查看是否可以在用户可见时显式绘制单元格。这样每次重绘单元格时,您可以保证颜色正确。 (假设您需要为行使用不同的颜色,否则只需设置单元格样式并使控件无效。

      更新:

      通过事件参数引用单元格样式很重要,否则您将执行递归来计算出您尝试访问的单元格样式。

      private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
      {
          e.CellStyle.BackColor = Color.PaleGreen
      }
      

      【讨论】:

      • 这个函数改变背景 foreach (DataGridViewRow row in gridView.Rows) { row.DefaultCellStyle.BackColor = Color.PaleGreen;我尝试将我的函数调用到 CellFormatting 中。根据您的建议,资源需求增加,工作速度急剧下降。我该如何改善这种情况并提高性能,或者您能建议另一种方法来解决以前的问题吗?
      • 我已经更新了我的答案。我的建议是确保不要在 CellFormatting 中进行递归工作。
      • 感谢斯宾塞的帮助。实际上,原因在于隐式递归。但是改变每个单元格的颜色成本太高。我使用 CellFormatting 事件,但检查条件以更改整行的颜色。结果,该功能可以快速正确地工作。非常感谢!
      【解决方案3】:

      我知道这是一个较老的问题,但我遇到了类似的问题并且很难找到答案。我最终自己弄清楚了。我的 DGV 位于选项卡控件上,所以我所要做的就是在应用颜色更改之前选择我的选项卡:

      this.tabControl1.SelectedTab = tabPage2;
      

      【讨论】:

        猜你喜欢
        • 2013-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-12
        • 2013-03-14
        • 2016-10-04
        • 2014-09-25
        相关资源
        最近更新 更多