【问题标题】:How to add color to DataTable row in VB.net base on condition如何根据条件为VB.net中的DataTable行添加颜色
【发布时间】:2021-04-25 11:49:57
【问题描述】:

我想用颜色而不是字符串填充 Datatable 行。颜色是字符串值的表示。正如您在下面的代码中看到的那样,我已经尝试过颜色和画笔。我怎样才能做到这一点?

例如,在前端,如果 cib = "EXIST/ACTIVE",我希望用户看到颜色为 GREEN

如果 cib = "EXIST/ACTIVE" 显示黄色。

这些值来自数据库

hdfAccountNumber.Value = GenericManager.decryptQueryString(Request.QueryString("AccountNumber"))
        Dim CustomerChannels = GetCustomerDetails(hdfAccountNumber.Value)
        Dim ussd As String = CustomerChannels.USSD + "/" + CustomerChannels.USSDStatus
        Dim cib As String = CustomerChannels.CIB + "/" + CustomerChannels.BBGStatus
        Dim rib As String = CustomerChannels.RIB + "/" + CustomerChannels.RIBStatus
        Dim mobile As String = CustomerChannels.MOBILEBANKING + "/" + CustomerChannels.NEWMOBILEStatus
        Dim debitCard As String = CustomerChannels.CardStatus

        Dim ussdColor As Color
        Dim cibColor As Color
        Dim ribColor As Color
        Dim mobileColor As Color
        Dim debitCardColor As Color



        Dim ChannelTable As New DataTable
        ChannelTable.Columns.Add("USSD")
        ChannelTable.Columns.Add("CIB")
        ChannelTable.Columns.Add("RIB")
        ChannelTable.Columns.Add("MOBILE")
        ChannelTable.Columns.Add("DEBIT CARD")

        For Each row As DataGridViewRow In DataGrid1.Rows
            cib = row.Cells(1).Value
            If cib = "EXIST/ACTIVE" Then
                cibColor = Color.Green
                row.DefaultCellStyle.ForeColor = cibColor
            ElseIf cib = "EXIST/INACTIVE" Then
                cibColor = Color.Yellow
                row.DefaultCellStyle.ForeColor = cibColor
            Else
                cibColor = Color.Red
                row.DefaultCellStyle.ForeColor = cibColor
            End If

            ussd = row.Cells(0).Value
            If ussd = "EXIST/ACTIVE" Then
                ussdColor = Color.Green
                row.DefaultCellStyle.ForeColor = ussdColor
            ElseIf ussd = "EXIST/INACTIVE" Then
                ussdColor = Color.Yellow
                row.DefaultCellStyle.ForeColor = ussdColor
            Else
                ussdColor = Color.Red
                row.DefaultCellStyle.ForeColor = ussdColor
            End If

        Next

        ChannelTable.Rows.Add(ussdColor, cibColor, rib, mobile, debitCard)
        DataGrid1.DataSource = ChannelTable
        DataGrid1.DataBind()
    End Sub

数据网格

   <asp:UpdatePanel ID="UpdatePanel4" runat="server" class=""  style="color:#ffffff; margin-top: 5px; font-size: 12px">
             <ContentTemplate>
       <p  style="font-weight: 700; font-weight: 700; margin-left: 10px; font-weight: normal; font-size: 14px;">Channels<span> <asp:Button ID="availableChannel" runat="server" Text="Get channels"  CssClass="tdcolor" /> </span></p>
          <asp:DataGrid ID="DataGrid1" runat="server" style="width: 100%; margin-top: -8px; font-weight: 600; border: 1px solid #5c2684;">  
          </asp:DataGrid>         
    </ContentTemplate>
</asp:UpdatePanel>    

【问题讨论】:

  • 如果 cib = "EXIST/ACTIVE" 等,我想向用户显示“绿色”
  • 您要更改行颜色或单元格颜色吗?
  • 我要更改单元格颜色
  • DataTable 没有 .Color 属性或 .Cell 属性。它是表的内存表示。您可以在 DataTable 中有一列包含您要显示的颜色。
  • .ForeColor 在单元格中显示的文本颜色。 .BackColor 就是你要找的。​​span>

标签: c# vb.net datatable colors


【解决方案1】:

您可以使用nameof 获取颜色的字符串名称。

var colorName = nameof(Brushes.Green);

【讨论】:

  • 我的意思是颜色本身而不是字符串名称
【解决方案2】:

试试下面的代码。您需要使用 row.DefaultCellStyle.* 的属性来设置行颜色和其他格式

 For Each row As DataGridViewRow In DataGrid1.Rows
    cib = row.Cells(1).value 
    If cib = "EXIST/ACTIVE" Then
        cibColor = Brushes.Green
        row.DefaultCellStyle.ForeColor = cibColor
    ElseIf cib = "EXIST/INACTIVE" Then
        cibColor = Brushes.Yellow
        row.DefaultCellStyle.ForeColor = cibColor
    Else
        cibColor = Brushes.Red
        row.DefaultCellStyle.ForeColor = cibColor
    End If

    ussd = row.Cells(0).value 
    If ussd = "EXIST/ACTIVE" Then
        ussdColor = Color.Green
        row.DefaultCellStyle.ForeColor = ussdColor
    ElseIf ussd = "EXIST/INACTIVE" Then
        ussdColor = Color.Yellow
        row.DefaultCellStyle.ForeColor = ussdColor
    Else
        ussdColor = Color.Red
        row.DefaultCellStyle.ForeColor = ussdColor
    End If

【讨论】:

  • 我收到Expression is of type 'DataGrid', which is not a collection type
  • 现在试试,如果出现错误,请复制粘贴堆栈跟踪...它会有所帮助
  • StackTrace Severity Code Description Project File Line Suppression State Error BC30456 'Rows' is not a member of 'DataGrid'. Infopool
  • DataGrid1的数据类型是什么?好像不是 GridView 控件
  • 它只是 DataGrid
猜你喜欢
  • 2018-06-25
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
相关资源
最近更新 更多