Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

obamaself

Carregar datagridview por código

Mensagens Recomendadas

obamaself    0
obamaself

Boas,

estou a carregar uma datagridview através de código no load do form.

Mas depois de a carregar quero comparar os valores com uma tabela e por as respectivas celulas a vermelho.

Só funciona se puser a função que põe a vermelho num botão por exemplo.

Há alguma maneira de fazer refresh ou assim ao form? :smoke:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
obamaself    0
obamaself

ele está a comparar direito. Se meter a função que compara num botão ela põe as células vermelhas.

Só eu queria que ao abrir o form ele carregasse a datagridview e comparasse logo.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
obamaself    0
obamaself

é muito código mesmo. mas pronto.

Carregar a datagridview:

  Dim DT As New DataTable
        DT = New DataTable("consultas")
        DT.Columns.Add("cod_relatorio")
        DT.Columns.Add("nr_ficha")
        DT.Columns.Add("edicao")
        DT.Columns.Add("decisao")
        DT.Columns.Add("Data")
        DT.Columns.Add("Ref")
        DT.Columns.Add("AC")
        DT.Columns.Add("Cor2")
        DT.Columns.Add("Pos")
        DT.Columns.Add("Ordem")
        DT.Columns.Add("lote")
        DT.Columns.Add("Operacao")

        Dim lista_d As New List(Of Colunas)
        lista_d = Colunas_BD.Filtro
        For Each coluna As Colunas In lista_d
            DT.Columns.Add(coluna.nome)
        Next
        DT.Columns.Add("Obs")


        Dim lista_produtos As New List(Of Ensaio)

        lista_produtos = Ensaios_BD.Qwery_Introduzido("  select top 100 ensaios.* from ensaios   order by cast(cod_Relatorio as int)DESC ")

        For Each registo As Ensaio In lista_produtos
            Dim novalinha As DataRow = DT.NewRow
            novalinha("cod_relatorio") = registo.cod_relatorio

            'Procurar Ficha Técnica
            Dim f As Ensaios_fichas = Ensaios_Fichas_BD.procurar_ficha_2(registo.cod_relatorio)
            novalinha("nr_ficha") = f.nr_ficha
            novalinha("edicao") = f.nr_edicao
            novalinha("Data") = registo.data.ToString("yyyy.MM.dd")
            novalinha("Ref") = registo.Ref
            novalinha("AC") = registo.AC
            novalinha("Cor2") = registo.cor2
            novalinha("Pos") = registo.pos
            novalinha("Ordem") = registo.Ordem
            novalinha("Lote") = registo.Lote
            novalinha("Operacao") = registo.Operacao
            novalinha("decisao") = registo.decisao_laboratorio

            Dim ensaios_col As List(Of Ensaios_Colunas) = Ensaios_Colunas_BD.Lista_De_Ensaios_Colunas(registo.cod_relatorio)
            For Each coluna_ensaio As Ensaios_Colunas In ensaios_col
                Dim cooluna As Colunas = Colunas_BD.Procurar_Por_Codigo(coluna_ensaio.codigo)
                novalinha(cooluna.nome) = coluna_ensaio.valor
            Next
            DT.Rows.Add(novalinha)
        Next
        dg.DataSource = DT

        Dim g As Grupo = GrupoBD.Procurar_Grupo(user.nome_grupo)
        If g.manutencao_ensaios = False Then
            For Each coluna As DataGridViewColumn In dg.Columns
                coluna.ReadOnly = True
            Next
        End If
        dg.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize
        dg.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells

Comparar:

       

        For i As Integer = 0 To dg.Rows.Count - 1
            For Each coluna As DataGridViewColumn In dg.Columns
                If dg.Item("nr_ficha", i).Value IsNot DBNull.Value And dg.Item("Edicao", i).Value IsNot DBNull.Value Then
                    If dg.Item(coluna.Index, i).Value IsNot DBNull.Value Then
                        If IsNumeric(dg.Item(coluna.Index, i).Value) = True Then
                            Dim colunaa As Colunas = Colunas_BD.Procurar_Por_Nome(coluna.HeaderText) 'Procurar a coluna
                            Dim col_metodo As List(Of Colunas_Metodos) = Colunas_Metodos_BD.Procurar_Por_CoDIGO(colunaa.codigo)   'Procurar nas colunas_metodos
                            If coluna.Index > 11 Then
                                If col_metodo.Count - 1 > -1 Then
                                    Dim metodo As metodos = Metodos_BD.Procurar(col_metodo(0).cod_metodo) 'Procurar o metodo
                                    If metodo.cod_metodo <> "" Then
                                        If metodo.n_caixas_texto = 1 Then
                                            Dim coluna_metodo As Colunas_Metodos = Colunas_Metodos_BD.Procurar_Por_coluna_e_codigo(1, colunaa.codigo) 'Procurar a colunas_metodos
                                            Dim ficha_metodo As Fichas_metodos = Lista_Metodos_BD.procurar_ficha_por_codigo_e_metodo(dg.Item("nr_ficha", i).Value, dg.Item("Edicao", i).Value, metodo.cod_metodo, 1) 'Procurar o método
                                            If ficha_metodo.cod_metodo IsNot Nothing Then
                                                If metodo.sinal = "Intervalo" Then
                                                    Dim lim_inferior As Single = Val(ficha_metodo.limite_inferior)
                                                    Dim lim_superior As Single = Val(ficha_metodo.limite_superior)
                                                    If Val(dg.Item(coluna.Index, i).Value) >= lim_inferior And Val(dg.Item(coluna.Index, i).Value) <= lim_superior Then
                                                        dg.Item(coluna.Index, 0).Style.BackColor = Color.White
                                                    Else
                                                        dg.Item(coluna.Index, i).Style.BackColor = Color.Tomato
                                                    End If
                                                ElseIf metodo.sinal = "Simples" Then
                                                    Select Case metodo.tipo_comparacao
                                                        Case ">="
                                                            Dim lim_inferior As Single = Val(ficha_metodo.limite_inferior)
                                                            If Val(dg.Item(coluna.Index, i).Value) < lim_inferior Then
                                                                dg.Item(coluna.Index, i).Style.BackColor = Color.Tomato
                                                            Else
                                                                dg.Item(coluna.Index, i).Style.BackColor = Color.White
                                                            End If
                                                        Case "<="
                                                            Dim lim_superior As Single = Val(ficha_metodo.limite_inferior)
                                                            If Val(dg.Item(coluna.Index, i).Value) > lim_superior Then
                                                                dg.Item(coluna.Index, i).Style.BackColor = Color.Tomato
                                                            Else
                                                                dg.Item(coluna.Index, i).Style.BackColor = Color.White
                                                            End If
                                                        Case "="
                                                            Dim lim_superior As Single = Val(ficha_metodo.limite_inferior)
                                                            If Val(dg.Item(coluna.Index, i).Value) <> lim_superior Then
                                                                dg.Item(coluna.Index, i).Style.BackColor = Color.Tomato
                                                            Else
                                                                dg.Item(coluna.Index, i).Style.BackColor = Color.White
                                                            End If
                                                    End Select
                                                End If
                                            End If
                                        ElseIf metodo.n_caixas_texto = 2 Then
                                            For Each c As Colunas_Metodos In col_metodo
                                                Dim coluna_metodo As Colunas_Metodos = Colunas_Metodos_BD.Procurar_Por_coluna_e_codigo(c.coluna, colunaa.codigo) 'Procurar a colunas_metodos
                                                Dim ficha_metodo As Fichas_metodos = Lista_Metodos_BD.procurar_ficha_por_codigo_e_metodo(dg.Item("NR_FICHA", i).Value, dg.Item("Edicao", i).Value, metodo.cod_metodo, c.coluna) 'Procurar o método

                                      If ficha_metodo.cod_metodo <> Nothing Then
                                                    If metodo.sinal = "Intervalo" Then
                                                        Dim lim_inferior As Single = Val(ficha_metodo.limite_inferior)
                                                        Dim lim_superior As Single = Val(ficha_metodo.limite_superior)
                                                        If Val(dg.Item(coluna.Index, i).Value) >= lim_inferior And Val(dg.Item(coluna.Index, i).Value) <= lim_superior Then
                                                            dg.Item(coluna.Index, 0).Style.BackColor = Color.White
                                                        Else
                                                            dg.Item(coluna.Index, i).Style.BackColor = Color.Tomato
                                                        End If
                                                    ElseIf metodo.sinal = "Simples" Then
                                                        Select Case metodo.tipo_comparacao
                                                            Case ">="
                                                                Dim lim_inferior As Single = Val(ficha_metodo.limite_inferior)
                                                                If Val(dg.Item(coluna.Index, i).Value) < lim_inferior Then
                                                                    dg.Item(coluna.Index, i).Style.BackColor = Color.Tomato
                                                                Else
                                                                    dg.Item(coluna.Index, i).Style.BackColor = Color.White
                                                                End If
                                                            Case "<="
                                                                Dim lim_superior As Single = Val(ficha_metodo.limite_inferior)
                                                                If Val(dg.Item(coluna.Index, i).Value) > lim_superior Then
                                                                    dg.Item(coluna.Index, i).Style.BackColor = Color.Tomato
                                                                Else
                                                                    dg.Item(coluna.Index, i).Style.BackColor = Color.White
                                                                End If
                                                            Case "="
                                                                Dim lim_superior As Single = Val(ficha_metodo.limite_inferior)
                                                                If Val(dg.Item(coluna.Index, i).Value) <> lim_superior Then
                                                                    dg.Item(coluna.Index, i).Style.BackColor = Color.Tomato
                                                                Else
                                                                    dg.Item(coluna.Index, i).Style.BackColor = Color.White
                                                                End If
                                                        End Select
                                                    End If
                                                End If
                                            Next
                                        Else
                                            For Each c As Colunas_Metodos In col_metodo
                                                Dim coluna_metodo As Colunas_Metodos = Colunas_Metodos_BD.Procurar_Por_coluna_e_codigo(c.coluna, colunaa.codigo) 'Procurar a colunas_metodos
                                                Dim ficha_metodo As Fichas_metodos = Lista_Metodos_BD.procurar_ficha_por_codigo_e_metodo_e_submetodo(dg.Item("NR_FICHA", 0).Value, dg.Item("Edicao", 0).Value, metodo.cod_metodo, c.coluna, c.cod_sub_metodo) 'Procurar o método

                                                'Dividir a string
                                                Dim valortodo As String = ficha_metodo.valor
                                                Dim valor1 As String = Nothing
                                                Dim valor2 As String = Nothing
                                                If valortodo <> "" Then
                                                    If valortodo.Contains("-") Then
                                                        Dim valor() As String = valortodo.Split(" - ")
                                                        If valor(0).Contains("/") Then
                                                            Dim subvalor() As String = valor(0).Split("/")
                                                            valor1 = subvalor(0) & ".5"
                                                        Else
                                                            valor1 = valor(0)
                                                        End If
                                                        If valor(2).Contains("/") Then
                                                            Dim subvalor() As String = valor(2).Split("/")
                                                            valor2 = subvalor(0) & ".5"
                                                        Else
                                                            valor2 = valor(2)
                                                        End If
                                                        'Comparacao
                                                        If Val(dg.Item(coluna.Index, 0).Value) >= Val(valor1) And Val(dg.Item(coluna.Index, 0).Value) <= Val(valor2) Then
                                                            dg.Item(coluna.Index, 0).Style.BackColor = Color.White
                                                        Else
                                                            dg.Item(coluna.Index, 0).Style.BackColor = Color.Tomato
                                                        End If
                                                    Else
                                                        If Val(dg.Item(coluna.Index, 0).Value) < Val(valortodo) Then
                                                            dg.Item(coluna.Index, 0).Style.BackColor = Color.Tomato
                                                        Else
                                                            dg.Item(coluna.Index, 0).Style.BackColor = Color.White
                                                        End If
                                                    End If
                                                End If
                                            Next
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            Next
        Next

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Caça    24
Caça

lol sim.

mas ele compara mas não põe a vermelho.

eu acho que tem a ver com o formulário ainda não estar "aberto".

Isso não tem nada a haver.. Estas a chamar o código para comparar depois de a grid estar carregada, ou seja, na ultima linha de código do evento Load?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
obamaself    0
obamaself

acabei de chamar só o formulário que estava no painel e ele pôs logo tudo direito e a vermelho.

há alguma maneira de ele estar no painel e aparecer na mesma vermelhas as células?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
obamaself    0
obamaself

claro.

também já tentei fazer um exemplo simples para experimentar mudar a cor das células com um formulário num painel.

E não consegui...

talvez seja a maneira de como estou a chamar o formulário:

 Dim form_pic As New Avaliar_Resultados(user, Panel1.Width - 80, Panel1.Height)
            form_pic.TopLevel = False
            Me.Panel1.Controls.Add(form_pic) 'Adiciona o novo formulário
            form_pic.Show()

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
obamaself    0
obamaself

sim. se eu puser o avaliar_resultados como formulário principal sem estar em painel ele põe direito. mas se abrir em painel já não.

fiz um pequeno exemplo em que chamo um formulário dentro do painel. e mesmo assim ele não muda a cor das células.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Caça    24
Caça

Para chamar

Dim F As New Form2
F.TopLevel = False
Panel1.Controls.Add(F)
F.Show()

no Load do Form2

DataGridView1.Rows.Add("fdsfds")
DataGridView1.Rows(0).DefaultCellStyle.BackColor = Color.Red

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
obamaself    0
obamaself

assim também me dá certo.

mas estou a carregar a datagrid por datatable

     
   Dim datat As New DataTable("aaa")
        datat.Columns.Add("Ola")
        Dim no As DataRow = datat.NewRow

        no("Ola") = "oii"
        datat.Rows.Add(no)

        DataGridView1.DataSource = datat

'Experimentei o teu e o meu
        DataGridView1.Item(0, 0).Style.BackColor = Color.Pink
        DataGridView1.Rows(0).DefaultCellStyle.BackColor = Color.Red

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Caça    24
Caça

Estranho...

Coloca o código num sub, tipo

    Public Sub Preenche()
        Dim Dt As New DataTable
        Dt.Columns.Add("Col1", GetType(Integer))
        Dt.Columns.Add("Col2", GetType(String))

        Dt.Rows.Add(1, "fdnbjnfdsjnf")
        Dt.Rows.Add(2, "fdnbjnfdsjnf")
        Dt.Rows.Add(3, "fdnbjnfdsjnf")

        DataGridView1.DataSource = Dt

        DataGridView1.Item(0, 0).Style.BackColor = Color.Red
    End Sub

e para chamar utiliza isto

        Dim F As New Form2
        F.TopLevel = False
        Panel1.Controls.Add(F)
        F.Show()
        F.Preenche()

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade