【问题标题】:How can I set cell font colour in a DataGridView?如何在 DataGridView 中设置单元格字体颜色?
【发布时间】:2013-06-15 01:41:38
【问题描述】:

我有一个 C# Winforms 应用程序,我需要在其中以编程方式设置单元格字体颜色。如果满足条件,则字体应为红色。我已经确认条件检查是正确的,问题出在一行

 dgv_Table.Rows[cell.RowIndex].Cells[cell.ColumnIndex].Style.ForeColor = Color.Blue;

其中“单元格”是我当前正在检查的单元格。这绝对没有任何作用。即使我把它从循环中取出并像这样检查:

dgv_Table.Rows[0].Cells[0].Style.ForeColor = Color.Blue;

它仍然什么都不做。这些代码行在 Main() 期间调用的辅助函数中。

如果我设置 DefaultCellValue,那确实会改变视图,但这不是我想要的。

 private void Main_Load(object sender, EventArgs e)
    {
        dgv_Table.Rows[0].Cells[0].Style.ForeColor = Color.Blue;
        dgv_Table.Rows[0].Cells[0].Style.BackColor = Color.Black;
        foreach (DataGridViewRow row in dgv_Table.Rows)
        {
            foreach (DataGridViewCell cell in row.Cells)
            {
                cell.Style.BackColor = Color.Black;
                if (cell.OwningColumn.Name == "RiskName" && cell.Value.ToString() != "")
                {
                    string wholeText = cell.Value.ToString();
                    int score = Convert.ToInt32(wholeText.Substring(wholeText.IndexOf("[") + 1, wholeText.IndexOf("–") - 1));
                    if (score > 300)
                    {
                        dgv_Table.Rows[cell.RowIndex].Cells[cell.ColumnIndex].Style.ForeColor = Color.Blue;
                    }
                }
            }
        }

    }

【问题讨论】:

  • 您是否尝试应用此更改?什么活动?
  • 当表单被加载时,它会通过并应该更改相应的单元格。
  • 您是否尝试在 DataGridView 上调用 Invalidate()
  • 我认为您的 datagridview 已绑定。如果是这样,您在哪里填写来源?在表单构造函数中?
  • 在构造函数中,是的。

标签: c# winforms datagridview


【解决方案1】:

这种属性(ForeColor 或 BackColor ...)应该在 Form Load event handler(或 Form Shown)中更改...或在您的 DataGridView 的其他一些事件处理程序中,我认为原因可能是您的DataGridView 行还没有准备好,我猜你把代码放在了 Form 构造函数中。

private void Form1_Load(object sender, EventArgs e){
   //place your code here
   dgv_Table.Rows[0].Cells[0].Style.ForeColor = Color.Blue;
}

【讨论】:

  • 在构造函数中,但我把它放在form_load中,它仍然不起作用。
  • @Shay 但我的工作,我认为你应该发布更多代码,我以前遇到过这个问题,对于 DataGridView,我们应该在表单加载事件处理程序中初始化一些属性。
  • @Shay,您应该确保您的表单加载事件处理程序已注册您的表单加载事件,复制我的代码并粘贴不起作用。
  • 编辑问题以添加 form_Load 代码并在事件中注册。
  • @Shay 尝试在您的Main_Load 中设置一些断点,看看执行是否跳转到那里?
【解决方案2】:

我最终做的是将这与另一个事件联系起来。因为 DataGridView 在 TabControl 内而不是在主选项卡中,所以我在单击 TabControl 时运行了检查。

可能不是最佳实践,当然也不理想,但它现在有效。

【讨论】:

  • 您可以尝试在我认为的 cellFormatting 事件中执行此逻辑。会比你的实际解决方案更好
  • 您没有提及您的 TabControl,但这是一次不错的体验 +1
猜你喜欢
  • 2012-05-24
  • 2011-10-23
  • 2018-06-15
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
相关资源
最近更新 更多