我对数据网格有以下问题。
我有一个datagridview,其中有几列已经着色,还有一个组合框。我的datagridview的第一列,"信号名称"具有与组合框相同的值。
我的目标是使用与组合框中相同的信号名称更改行的颜色,并使其他颜色保持相同的初始颜色。
我已尝试过以下代码,但它没有&#t;#34;重置"我运行时的初始颜色。相反,所需行的颜色被正确更改,但是当我将组合框的值更改为另一个值时,它不会重置为通常的颜色,我最终会将两行着色。
Public Sub ComboBox1_Selka() Handles ComboBox1.SelectedValueChanged
dgv_Sigdata.Columns("Target Profit").DefaultCellStyle.BackColor = Color.FromArgb(102, 255, 102)
dgv_Sigdata.Columns("Avg Loss").DefaultCellStyle.BackColor = Color.FromArgb(247, 197, 141)
dgv_Sigdata.Columns("Avg Win").DefaultCellStyle.BackColor = Color.FromArgb(102, 255, 102)
dgv_Sigdata.Columns("Stop Loss").DefaultCellStyle.BackColor = Color.FromArgb(247, 197, 141)
dgv_Sigdata.Columns("Target Profit").DefaultCellStyle.BackColor = Color.Beige
For Each row As DataGridViewRow In dgv_Sigdata.Rows
If row.Cells.Item(0).Value.ToString = ComboBox1.Text Then
dgv_Sigdata.Rows(row.Index).Cells("Signal Name").Style.BackColor = Color.FromArgb(10, 2, 102)
dgv_Sigdata.Rows(row.Index).DefaultCellStyle.BackColor = Color.FromArgb(10, 2, 102)
Else
dgv_Sigdata.Rows(row.Index).Cells("Signal Name").Style.BackColor = Color.White
End If
Next row
End Sub
此代码假设将所有列重置为其初始颜色,然后仅为组合框行着色。然而,它没有。
感谢您的帮助!
答案 0 :(得分:0)
首先,请遵循LarsTech提出的建议。
接下来,请注意颜色变化的逻辑:
ComboBox
选项匹配:
Cells("Signal Name")
深蓝色。 (冗余到下一行)。Cells("Signal Name")
白色。这很有效。设置了行DefaultCellStyle.BackColor
后,该行优先于列默认值。您可以将其更改回白色,但仍然会覆盖列颜色。层次结构似乎如下工作:
Cell.Style.BackColor -overrides-> Row.DefaulCellStyle.BackColor -overrides-> Column.DefaultCellStyle.BackColor
解决方案:
Public Sub ComboBox1_Selka() Handles ComboBox1.SelectedValueChanged
For Each row As DataGridViewRow In dgv_Sigdata.Rows
If row.Cells.Item(0).Value.ToString = ComboBox1.SelectedItem.ToString Then
For Each cell as DataGridViewCell In row
cell.Style.BackColor = Color.FromArgb(10, 2, 102)
Next cell
Else
row.Cells("Target Profit").Style.BackColor = Color.FromArgb(102, 255, 102)
row.Cells("Avg Loss").Style.BackColor = Color.FromArgb(247, 197, 141)
row.Cells("Avg Win").Style.BackColor = Color.FromArgb(102, 255, 102)
row.Cells("Stop Loss").Style.BackColor = Color.FromArgb(247, 197, 141)
row.Cells("Target Profit").Style.BackColor = Color.Beige
row.Cells("Signal Name").Style.BackColor = Color.White
End If
Next row
End Sub
附注:您使用单独的颜色设置Columns("Target Profit")
两次。我不知道这是否是一个简单的 oops 或复制粘贴错误。