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

Chamuanza

Comentário numa DataGridViewCell

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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  :-[

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 :)

Partilhar esta mensagem


Ligação 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.