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

Chamuanza

[Resolvido] Efeito de Mergecells no Datagridview com problemas

Mensagens Recomendadas

Chamuanza    4
Chamuanza

Consegui resolver em parte o tópico anterior com o código que a seguir apresento, encontrado num dos foruns.

No entanto verifico que apresenta alguns problemas.

Este código está ligado a uma datagridview1 que após preenchimento com +/- 170 linhas, faz o mergecells.

No entanto quando faço o scroll da datagridview a dada altura apresenta dois erros.

1) Algumas celulas apresentam deformação nos caracteres (Ver foto)

2)Quando o scroll chega ao fim a datagridview fica com uma cruz vermelha (Ver foto)

Agradecia uma ajuda

Obrigado desde já

//
Public Class frmRoscasTabelaComposta
   Private Sub frmRoscasTabelaComposta_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'TODO: This line of code loads data into the 'RoscasDataSet.TabRoscas' table. You can move, or remove it, as needed.
    Me.TabRoscasTableAdapter.Fill(Me.RoscasDataSet.TabRoscas)
   End Sub
   Private Sub btnSair_Click(sender As Object, e As EventArgs) Handles btnSair.Click
    Form1.Show()
    Me.Close()
   End Sub
   Private Sub DataGridView1_CellPainting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting

    'Executa o Mergecells da tabela de roscas
    If e.ColumnIndex = 0 Or e.ColumnIndex = 1 Or e.ColumnIndex = 2 Or e.ColumnIndex = 3 Or e.ColumnIndex = 4 Or e.ColumnIndex = 5 AndAlso e.RowIndex <> -1 Then
	    Using gridBrush As Brush = New SolidBrush(Me.DataGridView1.GridColor), backColorBrush As Brush = New SolidBrush(e.CellStyle.BackColor)
		    Using gridLinePen As Pen = New Pen(gridBrush)
			    ' Limpar Celulas
			    e.Graphics.FillRectangle(backColorBrush, e.CellBounds)
			    ' Draw line (bottom border and right border of current cell) 
			    'If next row cell has different content, only draw bottom border line of current cell 
			    If e.RowIndex < DataGridView1.Rows.Count - 1 AndAlso DataGridView1.Rows(e.RowIndex + 1).Cells(e.ColumnIndex).Value.ToString() <> e.Value.ToString() Then
				    e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1)
			    End If
			    ' Draw right border line of current cell 
			    e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom)
			    ' draw/fill content in current cell, and fill only one cell of multiple same cells 
			    If Not e.Value Is Nothing Then
				    If e.RowIndex > 0 AndAlso DataGridView1.Rows(e.RowIndex - 1).Cells(e.ColumnIndex).Value.ToString() = e.Value.ToString() Then
				    Else
					    e.Graphics.DrawString(CType(e.Value, String), e.CellStyle.Font, Brushes.Black, e.CellBounds.X + 2, e.CellBounds.Y + 5, StringFormat.GenericDefault)
				    End If
			    End If
			    e.Handled = True
		    End Using
	    End Using
    End If
   End Sub


End Class

oyg04El.gif

jTpGlza.gif

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 os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.