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

samesdavis

[Resolvido] Gridview: marcar/desmarcar e readonly

Mensagens Recomendadas

samesdavis    5
samesdavis

Tenho uma gridview que mostra todos os alunos de determinada classe. Nessa grid tenho apenas dois campos: nomealuno e presente ( true/false).

No carregamento da grid, eu tive dificuldade de bloquear a coluna de nome, mesmo eu colocando readonly = true e na coluna de presença = false, eu estou conseguindo editar os dois campos, mas não é isso que quero. Eu gostaria de deixar livre para edição apenas a coluna de prsença.

Bom, o outro problema é que quando eu clicar em uma linha da grid e marcar o campo de presença para determinado aluno, desejo que seja somado +1 em um campo que tenho no formulário que mostra o total de alunos presentes, e quando eu desmarcar um aluno, ele deverá diminuir  -1 desse campo de total de presentes.  Bom, essas são as duas dúvidas, alguém pode me ajudar?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    170
bioshock

Depois de carregares os dados, determinas via código qual é que queres readonly. Onde está a dificuldade? No código?

São só esses dois campos que vão ser mostrados na DataGrid?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
samesdavis    5
samesdavis

Então, eu já disse que é via código. Um campo coloco false e outro coloco true. Só que não funciona,  mas estou precisando de ajuda tbm na parte de marca/desmarca.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
samesdavis    5
samesdavis

O código é muto grande para eu digitar, estou conectado via celular.  Mas quando eu fui tentar digitar o pedaço do código, acheio o erro e agora já está funcionando. Agora o que está pendente é a parte do marca/desmarca que detalhei acima, não sei como montar o código e nem em qual evento usar.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    170
bioshock

No evento CellContentClick.

If DataGridView1.Rows(e.RowIndex).Cells(0).Selected Then
            ' Onde Cells(0) é a checkbox
            MsgBox("Hit")
        End If

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
samesdavis    5
samesdavis

Eu coloquei o código sugerido por você adaptando da seguinte forma:


Dim varPresente as Boolean = False

If GridLançamento.Rows(e.RowIndex).Cells(0).Selected Then
       varPresente = varPresente + 1
Else
       varPresente = varPresente - 1
End If

Só que para ambos os casos, ele está retornando como True, o que fiz de errado?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
obamaself    0
obamaself

       

  
        'Carregar a data grid view
        datat = New DataTable("aaa")
        datat.Columns.Add("nome")
        datat.Columns.Add("presenca")
        Dim todos_alunos As Integer = 0
        Dim alunos As List(Of Alunoo) = Alunoo_BD.lista_alunos
        For Each aluno As Alunoo In alunos
            Dim nova_linha As DataRow = datat.NewRow
            nova_linha("nome") = aluno.nome
            If aluno.presenca = True Then
                nova_linha("presenca") = "X"
                'Campo de alunos  presentes
                todos_alunos += 1
            Else
                nova_linha("presenca") = " "
                todos_alunos -= 1
            End If

            datat.Rows.Add(nova_linha)
        Next
        dg.DataSource = datat


        dg.Columns("nome").HeaderText = "Nome"
        dg.Columns("presenca").HeaderText = "Presença"


        dg.Columns("nome").ReadOnly = True
        dg.Columns("presenca").ReadOnly = True


        dg.RowHeadersVisible = False

        'Ao clicar mudar se esta presente ou nao
'Na datagridview o evento cellclick
    Private Sub dg_CellClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dg.CellClick
        If dg.CurrentCell.ColumnIndex > 0 Then

            If dg.Item(dg.CurrentCell.ColumnIndex, dg.CurrentCell.RowIndex).Value.ToString = "X" Then
                dg.Item(dg.CurrentCell.ColumnIndex, dg.CurrentCell.RowIndex).Value = " "
                todos_alunos -= 1
            Else
                dg.Item(dg.CurrentCell.ColumnIndex, dg.CurrentCell.RowIndex).Value = "X"
                todos_alunos += 1
            End If
        End If
    End Sub

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