Vb.net Datagridview没有';更改组合框值时不要更改颜色
我对datagrid有以下问题 我有一个datagridview,其中有几个已经着色的列和一个组合框。datagridview的第一列“信号名”与组合框的值相同 我的目标是使用与组合框中相同的信号名称更改行的颜色,并使用相同的初始颜色保留其他行 我尝试了下面的代码,但在运行时它不会“重置”初始颜色。相反,所需行的颜色已正确更改,但是,当我使用组合框将值更改为另一个值时,它不会像应该的那样重置为通常的颜色,并且我最终得到两行颜色Vb.net Datagridview没有';更改组合框值时不要更改颜色,vb.net,datagridview,colors,Vb.net,Datagridview,Colors,我对datagrid有以下问题 我有一个datagridview,其中有几个已经着色的列和一个组合框。datagridview的第一列“信号名”与组合框的值相同 我的目标是使用与组合框中相同的信号名称更改行的颜色,并使用相同的初始颜色保留其他行 我尝试了下面的代码,但在运行时它不会“重置”初始颜色。相反,所需行的颜色已正确更改,但是,当我使用组合框将值更改为另一个值时,它不会像应该的那样重置为通常的颜色,并且我最终得到两行颜色 Public Sub ComboBox1_Selka() H
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
假设此代码将所有列重置为其初始颜色,然后仅为组合框行着色。然而,事实并非如此
谢谢你的帮助 首先,按照您的建议进行操作 接下来,请注意颜色更改的逻辑:
单元格(“信号名称”)
深蓝色。(冗余到下一行)单元格(“信号名称”)
白色。这很有效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
旁注:您使用不同的颜色设置了两次
列(“目标利润”)
。我不知道这是一个简单的oops错误还是复制粘贴错误。在if…Then行上设置一个调试中断,当代码停止时,检查值。您可能希望使用ComboBox1.SelectedItem.ToString而不是ComboBox1.Text。顺便说一句,您可以使用row变量:row.Cells(“信号名称”).Style.BackColor=Color.White