Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, tenho uma tabela que puxo de um arquivo Access para ser visualizada dentro de um DataGridView.
Preciso desenvolver um método para alterar a cor de cada linha, cada linha com uma cor distinta de acordo com o valor de uma célula.
Minha tabela possui as seguintes colunas:
BatchID - Product - BachtSize - Priority - StartReq - Status
Os campos que serão analisados estão na coluna "Status"
Os valores variam entre: Completed(Verde), Delayed(Vermelho), In Progress(Amarelo), New(Branco)
Baseado nos valores que podem ser encontrados, preciso de ajuda para desenvolver um método que altere a linha de acordo com o valor.
Esse é todo o código que estou utilizando.
Public Class MainView
Private Sub btnMainViewCarregarDados_Click(sender As Object, e As EventArgs) Handles btnMainViewCarregarDados.Click
Try
Dim dt As New NorthwindDataSet.All_BatchesDataTable
Using da As New NorthwindDataSetTableAdapters.All_BatchesTableAdapter
da.Fill(dt)
End Using
DataGridView1.DataSource = dt.DefaultView
Dim cma As CurrencyManager = DirectCast(BindingContext(dt.DefaultView), CurrencyManager)
AddHandler cma.CurrentChanged, AddressOf SecondaryTable
SecondaryTable(Me, Nothing)
Catch ex As Exception
MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Public Sub SecondaryTable (ByVal sender As Object, ByVal e As EventArgs)
Try
Dim dv1 = DirectCast(DataGridView1.DataSource, DataView)
Dim dv2 As New DataView(dv1.Table)
Dim cma = DirectCast(BindingContext(dv1), CurrencyManager)
'define o filtro pelo nome e a seleção do nome no primeiro datagridview
dv2.RowFilter = "BatchID = '" & dv1(cma.Position)("BatchID").ToString & "'"
'atribui o valor ao segundo datagridview
DataGridView2.DataSource = dv2
Catch ex As Exception
Throw ex
End Try
End Sub
End Class
Eu sou novato com desenvolvimento ASPNET e estou me adaptando ainda.
Peço desculpas se não conseguir ser muito claro em minha dúvida.
Desde já agradeço qualquer ajuda.
>
16 horas atrás, quintelab disse:
Eu faria algo usando jquery pelo menos...
Como esta iniciando e não sei o quanto conhece de javascript, você pode fazer isso pelo vb.net mesmo, basta utilizar o evento RowDataBound pesquise um pouco sobre isso.
Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim myVal As String = e.Row.Cells(5).Text 'Indice da sua coluna status
If myVal = "Completed" Then
e.Row.BackColor = System.Drawing.Color.Green
End If
End If
End Sub
Não testei o código, mas vai ser algo nessa linha, basta adicionar suas outras condições.
Eu testei aqui e aqui aponta um erro:
Error 1 Type 'System.Web.UI.WebControls.GridViewRowEventArgs' is not defined.
Só que aí me oferece para alterar para:
'System.Windows.Forms.DataGridViewRowEventArgs'
Quando eu altero, me aparece mais erros:
Error 1 Event 'RowDataBound' cannot be found.
Error 2 'RowType' is not a member of 'System.Windows.Forms.DataGridViewRow'.
Error 3 'Text' is not a member of 'System.Windows.Forms.DataGridViewCell'.
Error 4 'BackColor' is not a member of 'System.Windows.Forms.DataGridViewRow'.
Eu procurei em vários lugares que apontam que estão certo e que fazem parte desta classe.
Alguns forums aparece para .NET Framework 4 pra baixo.
Estou utilizando o 4.5, não sei se tem tanta diferença assim.
Esta trabalhando com Windows.Forms ou asp.net ?
Meu projeto foi criado no Visual Studio como "Windows Forms Application" em "Visual Basic".
>
Em 7/11/2017 at 19:49, OCorlleone disse:
Eu sou novato com desenvolvimento ASPNET e estou me adaptando ainda.
ASPNET é web. Windows Forms Applications não é ASPNET. A resposta que te passei é pra asp.net
Aqui tem um exemplo de como fazer em windows forms: https://www.codeproject.com/Questions/573506/changepluscolorplusofplusspecificplusrowplusofplus
Obrigado pela ajuda, eu quem estava seguindo um exemplo em Windows Forms, porém é para ASPNET e agora eu estou no caminho certo, acredito que sua função irá funcionar, logo testarei.
Obrigado.
Eu faria algo usando jquery pelo menos...
Como esta iniciando e não sei o quanto conhece de javascript, você pode fazer isso pelo vb.net mesmo, basta utilizar o evento RowDataBound pesquise um pouco sobre isso.
Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim myVal As String = e.Row.Cells(5).Text 'Indice da sua coluna status
If myVal = "Completed" Then
e.Row.BackColor = System.Drawing.Color.Green
End If
End If
End Sub
Não testei o código, mas vai ser algo nessa linha, basta adicionar suas outras condições.