[英]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的答案。
您需要更改單個單元格。
這是從我可以成功執行此操作的應用程序中提取的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.