2013-06-18 73 views
0

我有一个C#Winforms应用程序,我需要以编程方式设置单元格字体颜色。如果符合条件,字体应该是红色的。我已经确认条件检查是正确的,问题是在线如何在DataGridView中设置单元格的字体颜色?

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; 
        } 
       } 
      } 
     } 

    } 
+1

你是否尝试应用此更改?什么事件? –

+0

当表单被加载时,它会通过并更改适当的单元格。 – Shay

+0

你试过在DataGridView上调用'Invalidate()'吗? –

回答

1

我最终做的是把它与另一个事件联系起来。由于DataGridView在TabControl内部,并且不在主选项卡中,所以在单击TabControl时运行检查。

可能不是最佳实践,当然也不理想,但它现在起作用。

+0

你可以尝试在我认为的cellFormatting事件中做这个逻辑。会比你的实际解决方案更好 –

+0

你没有对你的TabControl说过什么,但是这是一个很好的体验+1 –

0

这种属性(前景色背景色或......)应在Form Load event handler改变(或形式显示)...或者你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; 
} 
+0

他的评论我想这是在form_load –

+0

这是在构造函数,但我把它放在form_load,它仍然无法正常工作。 – Shay

+0

@Shay但我的作品,我认为你应该发布更多的代码,我之前遇到过这个问题,对于DataGridView,我们应该在Form Load事件处理程序中初始化一些属性。 –

相关问题