Jump to content
Sign in to follow this  
Chamuanza

Comentário numa DataGridViewCell

Recommended Posts

Chamuanza

Oi PAulino

andei lendo alguns artigos do blog e achei interessante este sobre colocar um comentario numa celula.

Tentei utilizar num pequeno programa que estou fazendo, mas não deu como pretendo.

Tenho a Datagridview com os dados, mas não pretendo adicionar mais nenhuma coluna, ou seja aplicar o comentario numa celula ja existente.

Como fazer?

O exemplo do blog funciona bem na coluna que adicionamos

Obrigado pela atenção

Share this post


Link to post
Share on other sites
Chamuanza

Bem pensado.

Mas esperava que o proprio Paulino me dessa uma dica sobre o assunto, escrito por ele

http://vbtuga.blogspot.com/search?q=datagridview

Eis o código que está no Blog

''' <summary>
''' Cria um novo tipo de coluna
''' </summary>
<System.Diagnostics.DebuggerStepThrough()> _
Public Class DataGridViewColumnComment
    Inherits DataGridViewColumn

    Public Sub New()
        MyBase.New(New DataGridViewCellComment())
    End Sub

End Class

''' <summary>
''' Cria uma nova TextBoxCell que irá permitir
''' adicionar comentários e mostrar como ToolTipText
''' </summary>
<System.Diagnostics.DebuggerStepThrough()> _
Public Class DataGridViewCellComment
    Inherits DataGridViewTextBoxCell

    Private m_Comment As String

    ''' <summary>
    ''' Guarda a informação dos comentários
    ''' </summary>
    Public Property Comment() As String
        Get
            Return m_Comment
        End Get
        Set(ByVal value As String)
            m_Comment = value

            ' Define o texto para a tooltip
            If m_Comment IsNot Nothing AndAlso m_Comment.Length <> 0 Then
                Me.ToolTipText = m_Comment
            Else
                Me.ToolTipText = String.Empty
            End If

        End Set
    End Property


    Protected Overrides Sub Paint(ByVal graphics As System.Drawing.Graphics, _
          ByVal clipBounds As System.Drawing.Rectangle, _
          ByVal cellBounds As System.Drawing.Rectangle, _
          ByVal rowIndex As Integer, _
          ByVal cellState As System.Windows.Forms.DataGridViewElementStates, _
          ByVal value As Object, _
          ByVal formattedValue As Object, _
          ByVal errorText As String, _
          ByVal cellStyle As System.Windows.Forms.DataGridViewCellStyle, _
          ByVal advancedBorderStyle As  _
                System.Windows.Forms.DataGridViewAdvancedBorderStyle, _
          ByVal paintParts As System.Windows.Forms.DataGridViewPaintParts)

        ' Desenha a célula (processo normal)
        MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, _
                    cellState, value, formattedValue, errorText, _
                    cellStyle, advancedBorderStyle, paintParts)

        ' Caso tenha algum comentário, desenha o triângulo
        If Me.Comment IsNot Nothing AndAlso Me.Comment.Length <> 0 Then

            Dim rect As Rectangle = cellBounds
            Dim points As New List(Of Point)
            points.Add(New Point(rect.Right - 8, rect.Top))
            points.Add(New Point(rect.Right, rect.Top + 8))
            points.Add(New Point(rect.Right, rect.Top))

            graphics.FillPolygon(Brushes.Red, points.ToArray)

        End If

    End Sub

End Class

Neste intervalo tem o código para adicionar colunas a grid que não me interessa

  Dim col As New DataGridViewColumnComment
        col.Name = "Nova Coluna"
        col.HeaderText = "Nova Coluna"
        Me.DataGridView1.Columns.Add(col)

  ' Posição na DataGridView
        Dim row As Integer = 0
        Dim col As Integer = 0

        ' Converte a célula para o tipo criado
        Dim cell As DataGridViewCellComment = _
            DirectCast(Me.DataGridView1(col, row), DataGridViewCellComment)

        ' Define um comentário para a célula. Para remover era necessário 
        ' apenas definir como String.Empty ou ""
        cell.Comment = "http://vbtuga.blogspot.com/"

        ' Obriga a célula, agora com comentário, a actualizar
        Me.DataGridView1.InvalidateCell(cell)

Share this post


Link to post
Share on other sites
jpaulino

Está a definir a DataSource em runtime ou está a associar directamente (via wizard) à DataGridView ?

Se estás a associas em design mode, basta editares as colunas, após compilares o projecto com a classe criada, e definir na ColumnType = DataGridViewColumnComment

Share this post


Link to post
Share on other sites
Chamuanza

Oi Paulino

Já consigo colocar o comentario na celula da Grid, fiz como indicaste, mas ao gravar o registo o comentário desaparece, não fica agarrado a celula

Share this post


Link to post
Share on other sites
jpaulino

Oi Paulino

Já consigo colocar o comentario na celula da Grid, fiz como indicaste, mas ao gravar o registo o comentário desaparece, não fica agarrado a celula

Mas isso já é outra coisa! Esse comentário tem de ser gravado em qualquer lado (base de dados por exemplo) e carregado quando a DataGridView é actualizada.

Share this post


Link to post
Share on other sites
Chamuanza

È isso Paulino

E como faço isso? Qual a maneira?

Se me deres uma dica eu vou rabiando, e depois vou colocando as duvidas

Share this post


Link to post
Share on other sites
jpaulino

È isso Paulino

E como faço isso? Qual a maneira?

Se me deres uma dica eu vou rabiando, e depois vou colocando as duvidas

Como eu tenho a funcionar é assim: o utilizador selecciona a célula e com o botão direito do rato mostra uma opção para inserir um comentário. Aparece um form para inserir o comentário e quando ele carrega em gravar, grava na base de dados e coloca na grid (fechando o form).

Depois, sempre que actualizo a DataGridView, vejo se existem comentários na base de dados e coloco-os visíveis.

Share this post


Link to post
Share on other sites
Chamuanza

Oi Paulino

Não tenho tido oportunidade de mexer no "Comentário numa DataGridViewCell" depois de ver a tua informação tenho para já uma questão a colocar:

Estando eu a querer usar a colocação do comentário nesta situação (junto foto p/ser mais percebivel) será possivel? É que se não for não vale a pena estarmos aqui a perder tempo podendo eu partir para outra solução.

A aplicação funciona nestes moldes:

comentario1.jpg

tenho uma lista de condominos com as colunas correspondentes aos meses do ano, e por vezes necessito de incluir um comentario  numa das celulas, é possivel agarrar o comentario a cada celula da Datagrid?

O código que estou a utilizar é o que indicas no teu blog

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Try
            'Adicionar comentario
            ' Posição na DataGridView
            Dim row As Integer = Label2.Text
            Dim col As Integer = Label3.Text

            ' Converte a célula para o tipo criado
            Dim cell As DataGridViewCellComment = _
                DirectCast(Me.SituacaoDataGridView(col, row), DataGridViewCellComment)


            ' Define um comentário para a célula. Para remover era necessário 
            ' apenas definir como String.Empty ou ""
            Dim Comentario As String = InputBox("Insira o Comentário", "Comentario")

            cell.Comment = Comentario
           
            ' Obriga a célula, agora com comentário, a actualizar
            Me.SituacaoDataGridView.InvalidateCell(cell)

        Catch ex As System.Exception
            System.Windows.Forms.MessageBox.Show(ex.Message)
        End Try

    End Sub

Share this post


Link to post
Share on other sites
Chamuanza

Eu não estou a conseguir gravar o comentario na BD

De facto coloco o comentario na celula, tudo bem, mas como é que gravo o comentario?

O que fica gravado na BD é o registo que faço inicialmente, quando vou lançando os dados dos respectivos meses é que posso ter necessidade de colocar um comentario, aí quando gravo e saio do form, quando volto não tenho o comentario na grid.

Share this post


Link to post
Share on other sites
jpaulino

De facto coloco o comentario na celula, tudo bem, mas como é que gravo o comentario?

Desculpa mas este tópico passou-me!

Como gravas? Com um TSQL command .... "INSERT INTO tabela (data, nome, comentário) VALUES (...)

Gravas a data, o dia, o nome da pessoa, etc, etc, e depois quando carregas os dados lês a informação da db e colocas da datagridview.

Share this post


Link to post
Share on other sites
bioshock

Desculpa mas este tópico passou-me!

Como gravas? Com um TSQL command .... "INSERT INTO tabela (data, nome, comentário) VALUES (...)

Gravas a data, o dia, o nome da pessoa, etc, etc, e depois quando carregas os dados lês a informação da db e colocas da datagridview.

Errado!

Com esse comando ele não grava nada, apenas insere na BD um novo registo. Para gravar tem de usar a query UPDATE.

Share this post


Link to post
Share on other sites
jpaulino

Errado!

Com esse comando ele não grava nada, apenas insere na BD um novo registo. Para gravar tem de usar a query UPDATE.

Quem te disse? :P

Ele tem de inserir um comentário e não actualizar! Se olhares para o artigo (e para o que já foi escrito) trata-se de uma funcionalidade adicional que tem de ser inserida.

Tenho isto a funcionar à bastante e é super prático ;)

Share this post


Link to post
Share on other sites
bioshock

Quem te disse? ;)

Ele tem de inserir um comentário e não actualizar! Se olhares para o artigo (e para o que já foi escrito) trata-se de uma funcionalidade adicional que tem de ser inserida.

Tenho isto a funcionar à bastante e é super prático :D

Ahh, pensei que ele já lá tivesse informação e quisesse altera-la e depois grava-la.

Peço desculpa então, é com o INSERT  :P

Share this post


Link to post
Share on other sites
jpaulino

mas tenho de criar uma tabela propria para colocar o comentario?

Claro!

Tens de criar uma tabela com os campos necessário de modo a que possas identificar a posição correcta da DataGridView.

Share this post


Link to post
Share on other sites
Chamuanza

Estou aqui com uma situação que e a seguinte

Já criei a tabela mas o que me falta ou o que está mal neste código, para me dar erro nas linhas  de cmd.Parameters

 Private Sub ButGravarComentarios_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButGravarComentarios.Click

        Dim conn As New OleDbConnection()

        conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\ContasCondominio\ContasCondominio.mdb;"

        Dim cmd As OleDbCommand = conn.CreateCommand
        cmd.CommandText = "Insert into Comentarios (NumLinha, NumColuna, Comentario) Values (@NumLinha,@NumColuna,@Comentario)"

        cmd.Parameters.Add("@NumLinha", Label2.Text)
        cmd.Parameters.Add("@NumColuna", Label3.Text)
        cmd.Parameters.Add("@Comentario", TextBox1.Text)


        Try
            conn.Open()
            cmd.ExecuteNonQuery()
            conn.Close()
            MsgBox("Registro incluido com sucesso !", MsgBoxStyle.Information, "Incluindo registros")
        Catch erro As Exception
            MsgBox("Erro " & vbCrLf & erro.ToString, MsgBoxStyle.Critical, "Erro")
        End Try

    End Sub

Share this post


Link to post
Share on other sites
Chamuanza

Oi já dei com gato  :cheesygrin:

coloquei assim e deu certo

cmd.Parameters.Add("@NumLinha", OleDbType.VarChar).Value = Label2.Text

de Qualquer das maneiras OBRIGADO

Share this post


Link to post
Share on other sites
bioshock

Para que percebas, todos parâmetros precisam de valores, esses valores ou os vais buscar a algum sitio, como fizeste, ou defines-os logo, ou seja:

cmd.Parameters.Add("@NumLinha", OleDbType.VarChar).Value = "26"

  :P

Share this post


Link to post
Share on other sites
Chamuanza

Obrigado pela dica na mesma

Agora e que a porca torçe o rabo(cá para o meu lado)

Depois de colocar os dados do comentario (nº de linha; nº de coluna, e comentario) na tabela comentarios, fico com a identificação da posição do mesmo em relação a Datagridview, tudo bem

Agora como é que ao fazer o Load do Form que tem a Datagridview coloco lá o comentario que tenho na tabela comentarios.

Pergunta de iniciante  😳

Share this post


Link to post
Share on other sites
jpaulino

Agora tens de trabalhar um pouco e puxar pela cabeça. Com base no que tens gravado, vais buscar os comentários e colocas nas posições correctas.

Com meia duzia de testes fica pronto :)

Share this post


Link to post
Share on other sites
Chamuanza

Oi Paulino como é que coloco no campo assunto RESOLVIDO?  :cheesygrin:

Obrigado pelas ajudas a todos

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.