Fórum Preciso de ajuda nessa GridView... #363
10/11/2008
Olá pessoal,
estou precisando de uma ajudinha, preciso implementar uma funcionalidade em gridview para atualização de uma informação especifica, so que eu não estou tendo a luz da criança, pois aqui agente não pode acessar a base diretamente, como o gridview faz temos que acessar por uma classe e usar hibernate, mas o que eu quero mesmo e a logica ou a ajuda mesmo nesse gridview para fazer essa implementação, usamos web user control na Tela de alteração, abaixo vou passar todo o codigo aonde preciso implementar:
Se tiver como visualizar as imagens preciso implementar os botões de editar, quando clicados aparecerar uma tela de apenas para alterar os valores de peso.
Imagens:
../imagens/articles/189441/GCR_2-2.JPG - Aqui preciso implementar uma forma que venha o botão imagem, apenas nas informações não nos titulos, conforme em vermelho.
imagens/articles/189441/CGR_1-2.JPG - Aqui preciso editar apenas aquela informação de peso.
----------------------------------------------------------------------------------------------
1 - visualizarReumo.aspx
<asp:Content ID="Content1" ContentPlaceHolderID="conteudo" runat="Server">
<table class="BordaTabela" width="100%" border="0" cellpadding="5" cellspacing="0">
<tr class="TituloTabela">
<td height="5">
Grau de Complexidade do RAL - GCRtd>
tr>
<tr class="LinhaClara">
<td style="height: 5px">
td>
tr>
<tr class="LinhaClara">
<td height="5">
<asp:GridView ID="gvGCR" runat="server" FooterStyle-CssClass="LinhaEscura"
FooterStyle-Font-Bold="true" Width="550px">
<Columns>
<asp:TemplateField HeaderText="Descrição">
<ItemTemplate>
ItemTemplate>
asp:TemplateField>
<asp:TemplateField HeaderText="Quantidade">
<ItemTemplate>
ItemTemplate>
<ItemStyle HorizontalAlign="Right" />
asp:TemplateField>
<asp:TemplateField HeaderText="Editar" >
<ItemTemplate>
<asp:ImageButton ImageUrl="~/site/imagens/ico-editar.gif" Onclick="PrototipoEditarGCR_click" Visible="true" runat="server" ID="PrototipoEditarGCR" />
ItemTemplate>
asp:TemplateField>
Columns>
<FooterStyle CssClass="LinhaEscura" Font-Bold="True" />
asp:GridView>
<br />
<asp:Label ID="lblTotalGCR" runat="server" CssClass="TituloPagina" Text="Total GCR: " style="font-weight: normal;">asp:Label>
<br />
<asp:Label ID="lblClassificacaoGCR" runat="server" CssClass="TituloPagina" Text="Classificação: " style="font-weight: normal;">asp:Label>
<uc1:Navegacao ID="navegaPagina" runat="server" btnTelaAnterior="false" btnProximaTela="false" btnEstouCiente="true" />
td>
tr>
table>
asp:Content>
----------------------------------------------------------------------------------------------
2 - visualizarResumo.aspx.vb
Imports System.Collections.Generic
Imports br.gov.dnpm.ral
Imports br.gov.dnpm.util
Partial Class VisualizarResumo
Inherits Page
Protected vQuantidadesProcessoPorTipoSituacaoOperacional As IDictionary(Of TipoSituacaoOperacional, Integer)
Protected vQuantidadesProcessoPorTipoDiploma As IDictionary(Of TipoDiplomaLegal, Integer)
Guarda a relação entre os tipos envolvidos e o peso
Protected vPesosPorTipoPropriedade As IDictionary(Of String, Integer) = New Dictionary(Of String, Integer)
Variável auxiliar utilizada no asp
Public headerTemplateDiploma As String
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Declarar variáveis locais
Dim _ral As RAL = Nothing
Dim _ralFacadeFactory As RALFacadeFactory = FacadeFactoryHelper.newFacadeFactory()
Dim _ralFacade As RALFacade = _ralFacadeFactory.criarRALFacade
Verificar se um RAL está sendo aberto
If Request.Params("codigoRal") <> Nothing Then
Session.Item("codigoRal") = Request.Params("codigoRal")
End If
Se existe um ral selecionado
_ral = _ralFacade.consultarCodigoRAL(Session.Item("codigoRal"))
Session.Add("numeroCpfCnpjMinerador", _ral.minerador.numeroCpfCnpj)
Session.Add("nomeMinerador", _ral.minerador.nome)
Session.Add("anoBaseRal", _ral.anoBase)
loadPermissaoMenu(_ral)
If _ral.analises Is Nothing Then
_ralFacade.salvar(_ral)
End If
If (_ral.analises.grauComplexidade Is Nothing) Or (_ral.analises.grauComplexidade.Count.Equals(0)) Then
_ralFacade.salvar(_ral)
End If
loadGrid(_ral)
getValorPonderadoTotal(_ral)
navegaPagina.loadButton(_ral)
End If
End Sub
Protected Function getValorPonderadoTotal(ByVal ral As RAL) As Integer
lblTotalGCR.Text += CType(ral.analises.totalGCR, Integer).ToString()
Select Case ral.analises.totalGCR
Case Is = 10
lblClassificacaoGCR.Text += "RAL de complexidade padrão"
Case Is > 10
lblClassificacaoGCR.Text += "RAL acima da complexidade padrão"
Case Is < 10
lblClassificacaoGCR.Text += "RAL abaixo da complexidade padrão"
End Select
Return CType(ral.analises.totalGCR, Integer)
End Function
Private Sub loadPermissaoMenu(ByVal _ral As RAL)
Dim _possuiAguaMineral As Boolean = False
Dim _possuiCessaoArrendamento As Boolean = False
Dim _possuiSubstanciaDiferenteDeAguaMineral As Boolean = False
For Each titulo As TituloAproveitamento In _ral.minerador.titulosAproveitamento
_possuiCessaoArrendamento = (titulo.cessao IsNot Nothing OrElse titulo.arrendamento IsNot Nothing)
If Not (_possuiSubstanciaDiferenteDeAguaMineral AndAlso _possuiAguaMineral) Then
For Each s As Substancia In titulo.substancias
If s.tipoClasse.descricao = "Água Mineral" Then
_possuiAguaMineral = True
Else
_possuiSubstanciaDiferenteDeAguaMineral = True
End If
Next
End If
Next
Session.Add("possuiAguaMineral", _possuiAguaMineral)
Session.Add("possuiCessaoArrendamento", _possuiCessaoArrendamento)
Session.Add("possuiSubstanciaDiferenteDeAguaMineral", _possuiSubstanciaDiferenteDeAguaMineral)
End Sub
Private Sub loadGrid(ByVal _ral As RAL)
Dim gcrs As New List(Of GrauComplexidade)
Dim gcrsLegal As New List(Of GrauComplexidade)
Dim gcrsOperacional As New List(Of GrauComplexidade)
Dim gcrsEmpreendimentos As New List(Of GrauComplexidade)
For Each gcr As GrauComplexidade In _ral.analises.grauComplexidade
If gcr.tipo.codigo.Equals(GrauComplexidadeImpl.tipos.LEGAL) Then
gcrsLegal.Add(gcr)
ElseIf gcr.tipo.codigo.Equals(GrauComplexidadeImpl.tipos.OPERACIONAL) Then
gcrsOperacional.Add(gcr)
ElseIf gcr.tipo.codigo.Equals(GrauComplexidadeImpl.tipos.CARACTERIZACAO_EMPREENDIMENTOS) Then
gcrsEmpreendimentos.Add(gcr)
End If
Next
gcrs.Add(New GrauComplexidadeImpl("1. CARACTERIZAÇÃO DOS DIREITOS MINERÁRIOS", 0, 0, Nothing))
If (gcrsLegal.Count > 0) Then
gcrs.Add(New GrauComplexidadeImpl("1.1 Legal", 0, 0, Nothing))
gcrs.AddRange(gcrsLegal)
End If
If (gcrsOperacional.Count > 0) Then
gcrs.Add(New GrauComplexidadeImpl("1.2 Operacional", 0, 0, Nothing))
gcrs.AddRange(gcrsOperacional)
End If
If (gcrsEmpreendimentos.Count > 0) Then
gcrs.Add(New GrauComplexidadeImpl("2. CARACTERIZAÇÃO DOS EMPREENDIMENTOS", 0, 0, Nothing))
gcrs.AddRange(gcrsEmpreendimentos)
End If
gvGCR.DataSource = gcrs
gvGCR.DataBind()
End Sub
Protected Sub PrototipoEditarGCR_click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
Dim PrototipoEditarGCR = Nothing
PrototipoEditarGCR.Redirect = "~/includes/PrototipoEditarGCR.ascx"
End Sub
End Class
----------------------------------------------------------------------------------------------
Se precisar de mais informação estou no aguarde, pra mim quanto antes melhor..
Att,
Alencar Porto
Posts
11/11/2008
Guinther Pauli
Olá Alencar,
Tudo bem ?
Você poderia esclarecer melhor, o que exatamente está querendo atualizar no gridview ?
Preciso entender melhor a situação para poder ajudá-lo.Quanto mais infomações melhor !!
Fico no aguardo,
abs
Claro,
nem eu estava entendo direito o que era pra fazer.
E o seguinte na Gridview devemos criar uma nova coluna Editar (quando clicamos no icone conforme mostra a figuras anexadas sobre Grai de complexidade do RAL, clicando nele deve ser aberto uma janelinha modalPopupExtended:ajax para editar as informações de peso"ou quantidade". Detalhe que ele deve criar dinamicamente os icones e nao deve criar em por exemplo 1.1 Legal e 1.2 Operacional. Eu não estou conseguindo fazer essa criação dinamica e ao mesmo tempo trazer corretamente a informação para alteração. Num User control.
Então preciso:
1 - Fazer um coluna editar GridView dinamincamente apenas nas informações apresentadas com valores (peso).
2 - Fazer um tela que altere, essas informações.
Espero que tenha ajudado, se precisar de mais informações so apresentar as questões toda ajuda e muito bem vinda, caso seja necessario criar um Video mostrando o projeto para um melhor entendimento posso faze-lo.
Att.,
Alencar Porto
alencarxx@hotmail.com
sky: alencar.porto
gtalk: alencarporto2008@gmail.com
12/11/2008
Guinther Pauli
Alencar,
Estou enviando em anexo um exemplo completo, inclusive com banco de dados, de como chama um modalpopup a partir de um gridview, inclusive tem o exemplo de atualização de dados.
http://video.devmedia.com.br/EuclidesChuma2/Chamado363-GridViewModelPopupExtender.zip
Caso tenha alguma dúvida estamos a disposição,
Aguardo seu retorno,
abs
Olá pessoal,
e o seguinte para conseguir Buildar (rodar) aqui na minha maquina preciso que esteja na versao 2.0 do VS, não tenho como baixar um Express VS 2008 e instalar na maquina que eu trabalho.
Eu vi o modelo, acredito que vai me ajudar, mas preciso faze-lo roda-lo. blz..
Att.,
Alencar Porto
13/11/2008
Guinther Pauli
Alencar,
Segue exemplo convertido para o VS 2005,
http://video.devmedia.com.br/EuclidesChuma2/Chamado363-GridViewModelPopupExtender-VS2005-.zip
Aguardo seu retorno,
abs
13/11/2008
Guinther Pauli
Alencar,
Seu problema foi resolvido ?
Posso ti ajudar em mais alguma coisa neste chamado ?
Fico no aguardo,
abs
Olá,
Cara ficou muito bom o exemplo para gridview em VS2005, aqui funcinou uma beleza. Mas ainda não contempla minha duvida.
Pois se verificarmos bem a minha gridview ele e preenchida com linhas que não editam nada, e eu ainda não achei uma logica correta para fazer que o o botão de editar não apareça nessas linhas,
por exemplo: 1.1 Legal ou 1.2 Operacional na tela de Grau de Complexidade, essa logica que eu preciso fazer funcionar na GridView.
Att.,
Alencar Porto
13/11/2008
Guinther Pauli
Alencar,
O que você quer é acionar o modalPopUp no momento que o usuário clikar na linha?
Gostaria de entender melhor qual seu objetivo, pois não está claro.
No aguardo,
abs
Ok,
Não não e isso não. preciso que você olha direito na imagem GCR_2.jpg, se perceber na coluna do ImageButton, tem linhas que não aparece a imagem Ico-editar.gif. Eu preciso dessa logica para o Gridview, pois a logica do ModalPopup esta ok. Não estou conseguindo saltar uma linha ou alguma regra que faça a imagemButton = false naquela linha especifica. Como eu disse por exemplo 1.1Legal so em Descrição mais nada em peso ou editar.
Basta olhar melhor a imagem anexo GCR_2.jpg.
13/11/2008
Guinther Pauli
Alencar,
Eu olhei as imagens, pelo que eu entendi essa é o cenário que você tem e não o que você queria ter.
Para ver se eu entendi,
Você quer que as imagens apareçam apenas nas linhas que não são títulos, assim como na imagem em anexo. e essa imagem ira chamar o modalPopUp ?
Seria apenas isso ou teria que ter alguma outra imagem nos títulos que edite apenas a descrição dos títulos?
Aguardo para fechar.
17/11/2008
Guinther Pauli
Alencar,
Continuamos aguardando seu retorno,
abs
Certo,
Eu continuo precisando de ajuda. Parece que não ficou claro o que eu preciso, o exemplo não supriu minha duvida, que e fazer um controle de linhas. como o exemplo em anexo da imagem GCR.JPG. Que as linhas marcas em vermelho na coluna Editar não deveria aparecer o ImageButton que linka para o modalPopup.
O que eu desejo e um mecanismo de controle dessas linhas para não aparecer nada.
Ou, será que não e possivel fazer isso numa gridview?
Att.
Alencar Porto
17/11/2008
[devmedia .net]
Olá Alencar,
Vamos resolver seu problema ok !?
O que eu entendi é que você precisa colocar o botão editar somente na linha que tem a informação de peso correto!?
Você deverá trabalhar com o método RowDataBound do Grid..
esse método é executado ao ser carregada as linhas do grid...
Segue abaixo um exemplo..
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if ((e.Item.ItemType == ListItemType.Item)|| (e.Item.ItemType == ListItemType.AlternatingItem))
{
//Verifica se a coluna correspondente ao peso ‚ diferente de vazio
if (e.Row.Cells[0].Text == "")
{
//Se for diferente de vazio
//encontre o botÆo editar , coloque o nome do botÆo editar(imagebutton)
((ImageButton)e.Row.FindControl("ImagemButton1")).Visible = false;
}
}
}
o resto fica igual, para utilizar o popup..
abraços,
Aguardo retorno...
Carlos Jr
Olá,
esta dando um erro de sintaxe na expressão abaixo:
((ImageButton)e.Row.FindControl("btnEdit")).Visible = False
O que seria, esta faltando alguma coisa, um for? Coloquei em anexo um printScreen do Erro_de_sintaxe.jpg,
A valeu pela dica, ja tinha tentado com RowDatabound, mas não nessa logica...
Att.,
Alencar Porto
18/11/2008
[devmedia .net]
Opa,
cara preciso que me envie o erro..
não consigo ver sua imagem...
Me envio o erro aqui no chamado mesmo...
Copia e cola mensagem, pois teria que funcionar..
Abraços
No aguardo
Carlos Jr