【问题标题】:Datagridview doesn't change colours when changing combobox values更改组合框值时 Datagridview 不会更改颜色
【发布时间】:2015-06-04 17:25:02
【问题描述】:

我的数据网格有以下问题。

我有一个数据网格视图,其中有几列已经着色和一个组合框。我的 datagridview 的第一列“信号名称”与组合框的值相同。

我的目标是更改与组合框中具有相同信号名称的行的颜色,并让其他行的初始颜色相同。

我已经尝试了以下代码,但在我运行它时它并没有“重置”初始颜色。相反,所需行的颜色已正确更改,但是,当我将组合框的值更改为另一个值时,它不会像应有的那样重置为通常的颜色,我最终得到了两行着色。

    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

此代码假设将所有列重置为其初始颜色,然后仅为组合框行着色。然而,事实并非如此。

感谢您的帮助!

【问题讨论】:

  • 在 If...Then 行上放置一个调试中断,当代码停止时,检查这些值。您可能想要使用 ComboBox1.SelectedItem.ToString 而不是 ComboBox1.Text。顺便说一句,您可以只使用行变量:row.Cells("Signal Name").Style.BackColor = Color.White

标签: vb.net datagridview colors


【解决方案1】:

首先,听从LarsTech的建议。

接下来,注意颜色变化的逻辑:

  1. 您为每列设置默认颜色。这行得通。
  2. 如果行的第一个单元格值与ComboBox 选择匹配:
    1. 颜色Cells("Signal Name")深蓝色。 (冗余到下一行)。
    2. 将该行的默认颜色设置为深蓝色。 (覆盖列颜色)。
  3. 其他:
    1. 颜色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 还是复制粘贴错误。

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 2015-12-08
    • 2015-04-13
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    相关资源
    最近更新 更多