簡體   English   中英

C#DataGridView單行顏色文本

[英]C# DataGridView Color text of single row

我有一個DataGridView,它有一個類作為其DataSource。

該類包含一個ID字符串,2x DateTimes和一個布爾值。

我已經編寫了一些代碼來更改與我傳遞給方法的ID相匹配的行的文本,但是我沒有嘗試過。

這是我到目前為止:

public void ShowInstanceAsTerminated(String id)
{
    foreach (DataGridViewRow dgvRow in dgvRIM.Rows)
    {
        if (dgvRow.Cells[0].Value.ToString() == id)
        {
            dgvRow.DefaultCellStyle.ForeColor = Color.Red;
        }
    }
}

這是我嘗試過的許多代碼變體之一,但問題的細胞永遠不會改變!

謝謝尼爾

試試這種格式:

dgvRIM.Rows[myRow].Cells[0].Style.ForeColor = Color.Red;

如果要設置整行,請遍歷所有單元格。

使用DataGridView的CellFormatting事件對組成行的單個單元格進行更改。

像這樣的東西(小心,未經測試):

private void dgvRIM_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
  if (dgvRIM.Rows[e.RowIndex].Cells[0].Value.ToString() == id) {
    e.CellStyle.ForeColor = Color.Red;
  }
}

這樣可以正常工作

private void grid1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
  DataGridViewRow row = grid1.Rows[e.RowIndex];// get you required index
  // check the cell value under your specific column and then you can toggle your colors
  row.DefaultCellStyle.BackColor = Color.Green;
}
row.DefaultCellStyle.ForeColor = Color.Red;

這適用於.NET 4.0及以上版本。

我相信解決方案在於您設置顏色時,而不是您設置顏色的方法。 已經提出了幾個不同的事件,其中一些確實有效。 使用cellformatting,databindingcomplete或甚至繪制事件的問題之一是它們被多次觸發。 從我收集的內容來看,datagridview控件存在一個問題,即在表單顯示之后,您無法更改任何單元格的顏色。 因此,在調用Shown()之前運行的方法或觸發的事件不會改變顏色。 作為問題解決方案的事件通常有效,但由於它們被多次調用,可能不是最有效的答案。

可能最簡單的解決方案是將代碼填入/填充表單的Shown()方法中的網格而不是構造函數。 下面是msdn論壇中一篇帖子的鏈接,該帖子向我提供了解決方案,它被標記為關於頁面下方3/4的答案。

MSDN論壇發布了解決方案

您需要更改單個單元格。

這是從我可以成功執行此操作的應用程序中提取的VB代碼,但不應該很難將其轉換為c#。

For i As Integer = 0 To ds.Tables("AddressChanges").Rows.Count - 1
                If ds.Tables("AddressChanges").Rows(i)("iSeriesAddress").ToString <> ds.Tables("AddressChanges").Rows(i)("CSIAddress").ToString() Then
                    Me.dgAddressDiscrepancies.Rows(i).Cells("iSeriesAddress").Style.BackColor = Color.Yellow
                    Me.dgAddressDiscrepancies.Rows(i).Cells("CSIAddress").Style.BackColor = Color.Yellow
                End If
Next

我剛剛測試了你的代碼(使用DefaultCellStyle設置ForeColor )並且它可以工作(使用.NET 3.5,但我不認為Winforms自2.0以來已經發展)。

現在我不知道為什么它對你不起作用...也許你在添加行之前調用代碼,或者在調用代碼之后重新加載行?

無論哪種方式,你可能會更好地使用Jay Riggs的解決方案,因為即使你之后添加新行也會有效。

TabControl似乎有一個錯誤, 當它有多個選項卡時 ,使用代碼創建的單元cellstyles僅應用於第一個選項卡的DataGridView ,因此要解決問題,可以將DataGridView移動到第一個選項卡,或者可以使用TabControl的SelectedIndexChanged事件並將您的樣式代碼放入此事件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM