Fórum Índice objeto DataGrid #3687

16/03/2009

0

Estou desenvolvendo um Sistema de Controla Acadêmico que tem como principais funções: Manutenção do cadastro de Alunos e Professores  (Inclusão, Alteração e Consulta), Lançamento de Notas de provas, exibição de boletins e documentação geral dos Alunos. Estou utilizando uma base de dados Access 2000. Linguagem: VB.Net Framework: Versão 3.5 O Sistema está bem adiantado, contudo estou com o seguinte problema: Preciso listar todas as turmas em que o professor leciona em um grid (utilizo o gridview) para que  o mesmo possa selecionar a turma em que deseja fazer os lançamentos de notas, após o professor clicar na opção Lançar Nota devo capturar os dados da turma selecionada (Turma, Ano Letivo e Componente Curricular) e é exatamente neste ponto que estou com dificuldades, pois não consegui descobrir como fazer para pegar os dados da linha selecionada. Em Tipo deveria exibir: Se Tipo = "01" - Ensino Regular                                      Se Tipo = "02" - Escola Técnica   Tentei com IF contudo não consegui.     Segue abaixo o código da página .aspx (Grid):               <asp:GridView ID="gvwSelecTurma" runat="server" AutoGenerateColumns="False"
                DataKeyNames="CodTurma">
                <Columns>
                    <asp:ButtonField ButtonType="Link" CommandName="LancarNota"
                        Text="Lançar Nota" HeaderText="Selecione" >
                        <HeaderStyle CssClass="cabecalho" />
                        <ItemStyle CssClass="tb_lvw" />
                    </asp:ButtonField>
                    <asp:BoundField HeaderText="Turma" DataField="CodTurma" >
                        <HeaderStyle CssClass="cabecalho" />
                        <ItemStyle CssClass="tb_lvw" />
                    </asp:BoundField>
                    <asp:BoundField HeaderText="Ano Letivo" DataField="AnoLetivo" >
                        <HeaderStyle CssClass="cabecalho" />
                        <ItemStyle CssClass="tb_lvw" />
                    </asp:BoundField>
                    <asp:BoundField HeaderText="Tipo" DataField="Tipo" >
                        <HeaderStyle CssClass="cabecalho" />
                        <ItemStyle CssClass="tb_lvw" />
                    </asp:BoundField>
                    <asp:BoundField HeaderText="Curso" DataField="CursoDescricao" >
                        <HeaderStyle CssClass="cabecalho" />
                        <ItemStyle CssClass="tb_lvw" />
                    </asp:BoundField>
                    <asp:BoundField HeaderText="Componente Curricular"
                        DataField="CompCurrDescricao" >
                        <HeaderStyle CssClass="cabecalho" />
                        <ItemStyle CssClass="tb_lvw" />
                    </asp:BoundField>
                    <asp:BoundField HeaderText="Etapa" DataField="EtapaDescricao" >
                        <HeaderStyle CssClass="cabecalho" />
                        <ItemStyle CssClass="tb_lvw" />
                    </asp:BoundField>
                </Columns>
            </asp:GridView>   -------------------------------------------------------------------------------------------------------
Código da página .vb:   Partial Class MasterPage_SCA_turma_prof
    Inherits System.Web.UI.Page       Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Dim ObjProfessorLecionaTurma As New ClassProfessorLecionaTurmaCompCurr
            Dim vCodProfessor As Integer
           'Utilizo uma variavel para armazenar o código de um professor, irei alterar mais tarde.
            vCodProfessor = 12
            'Utilizo o método ConsultaTurmaProfessor para preencher o Grid
            gvwSelecTurma.DataSource = ObjProfessorLecionaTurma.ConsultaTurmaProfessor(vCodProfessor)
            gvwSelecTurma.DataBind()
        End If
    End Sub       Protected Sub gvwSelecTurma_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gvwSelecTurma.RowCommand
        If e.CommandName = "LancarNota" Then            'Aqui eu deveria pegar o código da turma na linha selecionada
            Session("CodTurma") = gvwSelecTurma.Rows(0).Cells(1).Text             lblMensagem.Text = Session("CodTurma")             Response.Redirect("ProfLancaNota.aspx")
        End If
    End Sub
End Class
-----------------------------------------------
Indemberge Santos

Indemberge Santos

Responder

Posts

16/03/2009

[devmedia .net]

Opa, blz ?   Fiz um código funcional para seu problema favor testá-lo       If e.CommandName = "LançarNotas" Then

      ' Converte o row index armazenado no CommandArgument
      Dim index As Integer = Convert.ToInt32(e.CommandArgument)

      Dim row As GridViewRow = SeuGridView.Rows(index)
      ' Pegue as colunas que desejar
      Dim item As New TextBox()
      item.Text = Server.HtmlDecode(row.Cells(2).Text) & " " & _Server.HtmlDecode(row.Cells(3).Text)

    End If   Aguardo seu contato..   Abraços   Carlos Jr
Responder

Gostei + 0

17/03/2009

[devmedia .net]

Olá, bom dia ! Conseguiu testar o código que lhe enviei ?
Funcionou do jeito que você queria ?   Aguardo retorno   Abraços   Carlos Jr
Responder

Gostei + 0

17/03/2009

Indemberge Santos

Carlos Jr;   Funcionou exatamente como precisava, vou até publicar a página, só não consegui fazer com que na coluna Tipo aparecesse um texto ao invés do código do Tipo.   Eu tentei da seguinte forma:   Em Tipo deveria exibir: Se Tipo = "01" - Ensino Regular                                      Se Tipo = "02" - Escola Técnica   Tentei com IF contudo não consegui.     Obrigado!     Indemberge
Responder

Gostei + 0

17/03/2009

[devmedia .net]

Opa, que bom que deu certo !! Agora para exibir o tipo , você deve altera seu sql ou procedure que popula o grid.. Coloque a descrição do tipo fazendo join com a tabela que contém a descrição..Então no grid você coloca a coluna que contém a descrição .. por exemplo DSC_TIPO  o nome do campo no retorno do sql. Claro que se você tiver o tipo cadastrado na base de dados, caso contrário deverá alterar o texto da coluna, no evento RowDataBound do gridview.   Onde colocou esse if ??   Veja um exemplo abaixo   Sub SeuGrid_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.DataRow Then
    
     If (e.Row.Cells(2).Text == "1") Then                 e.Row.Text = "Tipo 1"                Else                 e.Row.Text = "Tipo 2"
     End If End Sub   Carlos Jr
Responder

Gostei + 0

18/03/2009

Indemberge Santos

Carlos;   Neste caso não armazeno estas informação no banco de dados, então utilizei um IF, mas não consegui fazer funcionar, como faço para disparar o evento Databound?   Veja como está meu código no arquivo .vb:       Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Dim ObjProfessorLecionaTurma As New ClassProfessorLecionaTurmaCompCurr
            Dim ObjProfessor As New ClassProfessor
            fvwDadosProfessor.DataSource = ObjProfessor.ObterProfessorUsuario(Session("Nome"))
            fvwDadosProfessor.DataBind()
            gvwSelecTurma.DataSource = ObjProfessorLecionaTurma.ConsultaTurmaProfessor(CType(fvwDadosProfessor.FindControl("lblCodProfessor"), Label).Text)
            gvwSelecTurma.DataBind()         End If
    End Sub         Sub grvSelecTurma_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then             If (e.Row.Cells(3).Text = "01") Then
                            e.Row.Cells(3).Text = "Ensino Regular"
            Else
                e.Row.Cells(3).Text = "Escola Técnica"
            End If
        End If
    End Sub
Responder

Gostei + 0

18/03/2009

Indemberge Santos

Carlos;   Neste caso não armazeno estas informação no banco de dados, então utilizei um IF, mas não consegui fazer funcionar, como faço para disparar o evento Databound?   Veja como está meu código no arquivo .vb:       Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Dim ObjProfessorLecionaTurma As New ClassProfessorLecionaTurmaCompCurr
            Dim ObjProfessor As New ClassProfessor
            fvwDadosProfessor.DataSource = ObjProfessor.ObterProfessorUsuario(Session("Nome"))
            fvwDadosProfessor.DataBind()
            gvwSelecTurma.DataSource = ObjProfessorLecionaTurma.ConsultaTurmaProfessor(CType(fvwDadosProfessor.FindControl("lblCodProfessor"), Label).Text)
            gvwSelecTurma.DataBind()         End If
    End Sub         Sub grvSelecTurma_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then             If (e.Row.Cells(3).Text = "01") Then
                               e.Row.Cells(3).Text = "Ensino Regular"
            Else
                e.Row.Cells(3).Text = "Escola Técnica"
            End If
        End If
    End Sub
Responder

Gostei + 0

18/03/2009

Indemberge Santos

Carlos;   Neste caso não armazeno estas informação no banco de dados, então utilizei um IF, mas não consegui fazer funcionar, como faço para disparar o evento Databound?   Veja como está meu código no arquivo .vb:       Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Dim ObjProfessorLecionaTurma As New ClassProfessorLecionaTurmaCompCurr
            Dim ObjProfessor As New ClassProfessor
            fvwDadosProfessor.DataSource = ObjProfessor.ObterProfessorUsuario(Session("Nome"))
            fvwDadosProfessor.DataBind()
            gvwSelecTurma.DataSource = ObjProfessorLecionaTurma.ConsultaTurmaProfessor(CType(fvwDadosProfessor.FindControl("lblCodProfessor"), Label).Text)
            gvwSelecTurma.DataBind()         End If
    End Sub         Sub grvSelecTurma_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then             If (e.Row.Cells(3).Text = "01") Then
                                e.Row.Cells(3).Text = "Ensino Regular"
            Else
                e.Row.Cells(3).Text = "Escola Técnica"
            End If
        End If
    End Sub
Responder

Gostei + 0

18/03/2009

[devmedia .net]

Olá, o DataBound é realizado no momento em que você executa o DataBind do Grid, você deve selecionar o grid, ir nas propriedades do mesmo, selecionar o item métodos na barra de propriedades, e clicar duas vezes no RowDataBound, aí ele cria o evento para você..   Para saber o que está acontecendo, coloque um breakpoint na linha       Sub grvSelecTurma_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then             If (e.Row.Cells(3).Text = "01") Then
                                e.Row.Cells(3).Text = "Ensino Regular"
            Else
                e.Row.Cells(3).Text = "Escola Técnica"
            End If
        End If
    End Sub   e veja pq ele não faz a comparação, pode ter algum espaço ou e.Row.Cell(3).Text pode estar em branco... Dê uma olhada nisso e me fale o que está retorando...   Qualquer dúvida me fale que te mando o código pronto, mas você deve me envar seu html (somente a parte do grid) e o método RowDataBound.   Abraços   Carlos Jr
Responder

Gostei + 0

19/03/2009

[devmedia .net]

Opa, tudo bem ? Estou aguardando um contato seu para finalizarmos o chamado ou darmos continuidade ao mesmo.   Abraços   Carlos Jr
Responder

Gostei + 0

19/03/2009

Indemberge Santos

Carlos;   Funcionou perfeitamente, demorei pra achar onde criar o evento, mas depois lembrei que deveria fazer isso no arquivo .vb (código), segue abaixo o código pronto:   Protected Sub gvwSelecTurma_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvwSelecTurma.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then
            Select Case (e.Row.Cells(3).Text)
                Case "01"
                    'If (e.Row.Cells(3).Text = "01") Then
                    e.Row.Cells(3).Text = "Ensino Regular"
                Case "02"
                    e.Row.Cells(3).Text = "Escola Técnica"
                Case Else
                    e.Row.Cells(3).Text = ""
            End Select
        End If
End Sub   Depois devo acrescentar outros tipos de cursos, por isso utilizei o Case.   Com respeito a este chamado não sei devo fechar, pois irei fazer um grid para lançamento de notas dos alunos e tenho dúvidas de como fazer isto.   Vou explicar como deverá funcionar:   1) Quando a página for carregada irei preencher um grid com os alunos da turma e componente curricular selecionados no grid que criamos (gvwSelecTurma);   2) O grid possuirá campos das avaliações dos alunos do bimestre correspondente ao lançamento;   3) O professor (usuário) irá lançar as notas;   4) Após o lançamento irei calcular a média.   O problema é que não sei qual o melhor objeto a ser utilizado para este fim e como fazer para editar estes dados.  
Responder

Gostei + 0

19/03/2009

[devmedia .net]

Opa, a melhor maneira mesmo é utilizar o GridView, você lista todos os alunos, e coloca um botão de editar em cada linha que contenha o aluno, passando como parâmetro o código do aluno para uma tela onde você lançará as notas,
você deve guardar a informação do código do aluno, pois fará um insert das notas e calculará as médias. Não indico fazer edição no próprio grid, não acho legal visualmente...

Acesse o curso https://www.devmedia.com.br/articles/viewcomp.asp?comp=7116 para ver como  eu faço o acesso aos dados e onde mostro o exemplo de um grid.

Neste curso https://www.devmedia.com.br/articles/viewcomp.asp?comp=8094 ;do Fábio ele mostra também como trabalhar com grid da mesma maneira que estou lhe dizendo para fazer, com edição em outra tela, mas a seleção do registro acontece em uma tela anterior passando o código como parâmetro.   Caso não tenha acesso aos curso, por favor nos informe para que possamos lhe dar acesso gratuitamento aos mesmos, ok!?   No aguardo,   Abraços   Carlos Jr
Responder

Gostei + 0

19/03/2009

Indemberge Santos

Carlos;   Vou explicar porque pensei em editar os registros em um grid.   A maioria dos professores vivem sempre com pressa e quase não dipõem de tempo, então se eles tivessem que selecionar aluno por aluno e lançar nota por nota, com certeza iriam ficar insatisfeitos, então eu resolvi trabalhar da seguinte forma: criei uma tabela e no momento da matrícula do aluno, com base na matriz curricular do curso escolhido, irei incluir um registro com o Código do Aluno, Código do Componente Curricular, campos pré-definidos das avaliações, máximo de três avaliações por bimestre, e campos para armazernar as médias, isso para cada componente curricular.   Dessa forma o professor irá apenas editar os campos correspondentes das avaliações, e eu apenas farei um update na tabela.   O problema agora é que preciso mostrar todos os registros, ou seja, todos os alunos da turma e componente curricular selecionado,  em um formulário que permita a navegação (utilizar por exemplo tabindex) sem que o professor se perca durante o lançamento (alteração)´das notas.   Caso seja necessário abrir outro chamado, me avise, e eu farei isso, só gostaria de continuar sendo atendido por você, pois já está a par do assunto.   Um abraço;   Indemberge
Responder

Gostei + 0

20/03/2009

[devmedia .net]

Opa, blz ?
Bom , como o assunto mudou e agora você quer saber como listar os registros dos alunos em uma tela, seria necessário sim a abertura do chamado.   Outra coisa, na abertura do chamado tente especificar um pouco melhor, com mais detalhes como desejar ver esses registros, pois não entendi muito bem como deseja, pode fazer uma imagem ou até mesmo um vídeo mostrando sua dúvida.   Talvez te ajuda, já que falou sobre o controle TAB,
segue um vídeo sobre esse componente, dê uma olhada, caso não resolva seu problema abra outro chamado, ok!?

Caso não tenha acesso a video aula, favor nos comunicar que lhe daremos acesso gratuito ao mesmo.
https://www.devmedia.com.br/articles/viewcomp.asp?comp=5159   No aguardo,   Grande Abraço   Carlos Jr  
Responder

Gostei + 0

22/03/2009

[devmedia .net]

Olá, tudo bem ? Estou aguardando seu contato para darmos continuidade ao atendimento ou encerramento do chamado.   Grande abraço   Carlos Jr
Responder

Gostei + 0

23/03/2009

Indemberge Santos

Bom dia! Provavelmente irei abrir outro chamado, contudo hoje irei terminar uma outra rotina em que estou trabalhando, e assim que terminar decido o que fazer.   Um abraço;   Indemberge
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar