Formatar data em um grid view

17/11/2015

0

Bom dia, estou desenvolvendo uma aplicação utilizando Asp .Net e C#, mas não tenho muitos conhecimentos, logo, alem dessa duvida tenho muitas outras.

Como eu faço para formatar a data no grid view? Na minha tabela do SQL a coluna data está defina como DATE, e quando eu exibo os dados no meu grid view ele mostra "DD/MM/AAAA 00:00:00", ou seja, ele traz a data e a hora, mas eu não tenho essa informação no banco de dados. Com isso não consigo voltar o valor da data para o meu text box, pq eu defini o text bom como date.

Tenho dois campos que guardam a hora, e esses estão funcionando corretamente, tanto no banco quanto na aplicação.

Estou preenchendo o grid view com um DataTable, coloquei o código no load da página para a lista de funcionários ser carregada no inicio.

Chamando o metodo no load da página
protected void Page_Load(object sender, EventArgs e)
        {
            //carrega grid com dados da tabela Funcionarios do Banco de dados
            DataTable ListFunc = Funcionarios.ListaFuncionarios();
            GridPrincipal.DataSource = ListFunc;
            DataBind();
        }



Metodo na classe Funcionarios

public static DataTable ListaFuncionarios()
        {
            string strSql = ("select a.ID_Func as ID, a.Nome_Func as Nome, a.Nr_Reg as 'Nº Registro', a.Ramal_Func as Ramal, c.nome_area as Área, d.nome_cargo as Cargo, b.Nome_Empregador as Empregador, a.DT_Adm as 'Data de Admissão', a.HR_Entra as 'Hr Entra', a.HR_Sai as 'Hr Sai', a.DT_Nasc as 'Data Nascimento', a.DT_Ultima_Atu as Atualizado_em from Funcionarios a, Empregador b, AreaFunc c, CargoFunc d where a.Empregador_Func = b.id_Empregador and a.Area_Func = c.id_area and a.Cargo_Func = d.id_Cargo order by Nome_Func");

            SqlConnection conn = ConetaBD.AbreConn();

            SqlCommand cmdListar = new SqlCommand(strSql, conn);

            cmdListar.CommandType = CommandType.Text;

            SqlDataAdapter da = new SqlDataAdapter(cmdListar);

            DataTable Lista = new DataTable();

            da.Fill(Lista);

            return Lista;
        }//fim do metodo



Minhas classes possuem apenas metodos, não sei se isso interfere em algo. Não estou utilizando atributos nas classes por não consegui utiliza-los, para eu utilizar os atributos da classe no metodo, eu não posso deixar o metodo como STATIC, e se o metodo não for STATIC eu não consigo utilizar ele na aplicação. Mas acho esse assunto pode esperar um pouco... rss

Att.,
Ricardo

Ricardo

Responder

Post mais votado

17/11/2015

Esse código funciona?

Normalmente uso assim:


    <Columns>
        <asp:BoundField DataField="Nome" HeaderText="Customer Name" />

      <asp:BoundField HeaderText="Data" DataField="Data de Admissão"  DataFormatString="{0:dd/MM/yy}">

...
...
..




Outra forma e formatar no próprio SQL, não acho a melhor, pois formatando no grid você pode mudar de bd que vai funcionar, se formatar direto no SQL não.

.. .... CONVERT(VARCHAR(10),a.DT_Adm ,103) as 'Data de Admissão'.....

Jothaz

Jothaz
Responder

Mais Posts

17/11/2015

Jothaz

<asp:BoundField HeaderText="Data" DataField="SuaData" 
 DataFormatString="{0:dd/MM/yy}">


           <ItemTemplate>
                <%# DataBinder.Eval(Container.DataItem, "sua_sata", "{0:dd/MM/yyyy}")%>
            </ItemTemplate>
        </asp:TemplateField>
Responder

17/11/2015

Ricardo

Jothaz, onde eu coloco esses códigos?

O código do meu grid view é:

<asp:GridView ID="GridPrincipal" runat="server" BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None" OnSelectedIndexChanged="GridPrincipal_SelectedIndexChanged">
            <AlternatingRowStyle BackColor="PaleGoldenrod" />
            <Columns>
                <asp:CommandField ButtonType="Button" ShowSelectButton="True" />
            </Columns>
            <FooterStyle BackColor="Tan" />
            <HeaderStyle BackColor="Tan" Font-Bold="True" />
            <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" />
            <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
            <SortedAscendingCellStyle BackColor="#FAFAE7" />
            <SortedAscendingHeaderStyle BackColor="#DAC09E" />
            <SortedDescendingCellStyle BackColor="#E1DB9C" />
            <SortedDescendingHeaderStyle BackColor="#C2A47B" />
        </asp:GridView>


tentei adicionar o seu código dentro do código do meu grid view, mas ele reclamou...

No meu caso o DataField ficaria = "Data", por que é o nome da coluna que esta vinculada ao banco de dados, certo?

Att.,
Responder

17/11/2015

Ricardo

Sim, foi o código gerado pelo visual studio.

[img:descricao=grid]http://arquivo.devmedia.com.br/forum/imagem/451395-20151117-132743.png[/img]


Adicionei as duas linhas no código
 <asp:GridView ID="GridPrincipal" runat="server" BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None" OnSelectedIndexChanged="GridPrincipal_SelectedIndexChanged">
            <AlternatingRowStyle BackColor="PaleGoldenrod" />


            <Columns>
                <asp:CommandField ButtonType="Button" ShowSelectButton="True"/>
                <asp:BoundField DataField="Nome" HeaderText="Customer Name" />
                <asp:BoundField HeaderText="Data" DataField="Data de Admissão"  DataFormatString="{0:dd/MM/yy}">
            </Columns>


            <FooterStyle BackColor="Tan" />
            <HeaderStyle BackColor="Tan" Font-Bold="True" />
            <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" />
            <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
            <SortedAscendingCellStyle BackColor="#FAFAE7" />
            <SortedAscendingHeaderStyle BackColor="#DAC09E" />
            <SortedDescendingCellStyle BackColor="#E1DB9C" />
            <SortedDescendingHeaderStyle BackColor="#C2A47B" />
        </asp:GridView>


E deu o seguinte erro:
Server Error in '/' Application.

Parser Error

Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately. 

Parser Error Message: Content ('</Columns>') does not match any properties within a 'System.Web.UI.WebControls.BoundField', make sure it is well-formed.

Source Error: 


Line 19:  
Line 20:                 <asp:BoundField HeaderText="Data" DataField="Data de Admissão"  DataFormatString="{0:dd/MM/yy}">
Line 21:             </Columns>
Line 22:             <FooterStyle BackColor="Tan" />
Line 23:             <HeaderStyle BackColor="Tan" Font-Bold="True" />

Source File: /CadFunc.aspx    Line: 21 

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34280



Já tentei formatar o grid view de varias maneiras e nenhuma deu certo ainda...
Responder

17/11/2015

Ricardo

Jothaz agora funcionou.. valeu...

Só tem um problema, ele tirou da ordem as minhas colunas.. as 3 colunas setadas entre as tags <columns> foram para a frente, mas isso eu consigo acertar aqui.

Eu tenho que criar um BoundField para cada coluna, ou tem uma outra maneira de deixar as colunas na ordem que eu coloquei no select?

Mais uma vez obrigado! me ajudou muito!!!
Responder

17/11/2015

Ricardo

Jothaz agora funcionou.. valeu...

Só tem um problema, ele tirou da ordem as minhas colunas.. as 3 colunas setadas entre as tags <columns> foram para a frente, mas isso eu consigo acertar aqui.

Eu tenho que criar um BoundField para cada coluna, ou tem uma outra maneira de deixar as colunas na ordem que eu coloquei no select?

Mais uma vez obrigado! me ajudou muito!!!
Responder

17/11/2015

Jothaz

BoundField ou TemplateField/ItemTemplate depende de você.
Ou use o convert na execuçaõ do SQL.
Responder

18/11/2015

Ricardo

Jothaz, pensei que tinha resolvido o problema mas não resolveu totalmente...

Com o BoundField ele repete a coluna, a coluna fica duplicada no grid, fica a coluna do BoundField e a coluna do DataTable.

Usei o convert no select, a exibição ficou perfeita, porem ele não carrega o valor da data no text box para eu realizar o update.

Eu defini meu text box como date, para ajudar o usuário na hora do preenchimento...

<asp:TextBox ID="txtDataAdm" runat="server" style="margin-bottom: 0px" TextMode="Date"></asp:TextBox>


Pra mim tanto faz usar a formatação da data no SQL ou no grid, por que no meu caso o banco vai ser SQL mesmo. Mas sei que seria melhor utilizar a formatação no grid.

Se eu não conseguir converter a data no grid agora, eu faço pelo SQL mesmo (que é mais fácil) e depois volto nisso.

Abs...
Responder

18/11/2015

Jothaz

Olha estou sem acesso a IDE do Visual Studio então complica um pouco a ajuda.

Pelo que me lembre existe um atributo na propriedade do Gridview em que você define se será gerado automaticamente as colunas ou não.
Se forusar o o BoundField ou TemplateField/ItemTemplate você de colocar o atributo allowgeneratecolumnn ou autogeneratecolumnn (ou algo assim como false.

Ai é só colocar todos os campo no BoundField ou TemplateField/ItemTemplate.

Agora exista a solução convert, que no seu caso pode ser utilizada.
Responder

18/11/2015

Ricardo

Jothaz, era isso mesmo, eu tinha esquecido de alterar essa propriedade.

Mas as datas não estão sendo carregadas nos text box, mas parece que eu tenho que carregar esses valores via data set e não diretamente do grid, o grid só vai passar a posição do registro.

Obrigado!!!
Responder

18/11/2015

Jothaz

Fica quase impossível opinar se entender ou ver a aplicação funcionando.

Sinceramente não entendi qual seria o uso TextBox, seria para entrada de dados no grid?

Mas existe um método GridView.RowDataBound que é disparado na criação da linha do grid onde pode-se recuperar os dados da lista e usá-los da forma que quiser.

Posso estar falando uma grande bobagem, mas as cegas só posso ajudar com conjecturas.
Responder

18/11/2015

Ricardo

Os text box são usados no INSERT e UPDATE no banco.

Os text box são salvar os dados no banco, para um novo funcionario está funcionando.

Porem se eu preciso fazer alguma alteração no cadastro desse funcionário, quando eu mando tirar os dados do grid e colocar cada coluna no text box correspondente, as datas não vão, todas as outras colunas vão para o seu text box.

eu coloquei um botão no inicio do grid para selecionar a linha que eu quero alterar, fui nas propriedades dele e adicionei uma coluna, não sei se essa é a maneira correta de fazer isso, mas foi a unica q encontrei...

Os text box das datas estão definidos como TextMod = "DATE", se eu deixar eles não colocar isso, eles funcionam tbm. O problema está com o tipo do text box.
Responder

18/11/2015

Ricardo

Os text box são usados no INSERT e UPDATE no banco.

Os text box são salvar os dados no banco, para um novo funcionario está funcionando.

Porem se eu preciso fazer alguma alteração no cadastro desse funcionário, quando eu mando tirar os dados do grid e colocar cada coluna no text box correspondente, as datas não vão, todas as outras colunas vão para o seu text box.

eu coloquei um botão no inicio do grid para selecionar a linha que eu quero alterar, fui nas propriedades dele e adicionei uma coluna, não sei se essa é a maneira correta de fazer isso, mas foi a unica q encontrei...

Os text box das datas estão definidos como TextMod = "DATE", se eu deixar eles não colocar isso, eles funcionam tbm. O problema está com o tipo do text box.
Responder

18/11/2015

Jothaz

Sou meio burro então ainda fica confuso, mas já pensou em retirar TextMod = "DATE" e utilizar alguma mascara em JavaScript como o JQuery.
Responder

18/11/2015

Ricardo

Cheguei nessa parte da aplicação agora, eu estava fazendo as classes e montando os metodos das classes, antes eu estava testando com o text box padrão (SingleLine), e funcionava.

Depois vou ver uma mascara, vou precisar de uma para CNPJ também.

Queria fazer uma coisa bem simples, por que a principio essa aplicação seria apenas para fazer atualizações na lista de ramais e aniversariantes do mês que ficam na intranet da empresa, eu que estou querendo colocar outras funções nela.

Mas também não sei se vou conseguir exibir esse grid view na intranet, ela é feita em sharepoint, depois q essa primeira parte da aplicação ficar pronta vou tentar exibir o grid na intranet.

O maior problema que enfrentei até agora foi querer fazer tudo utilizando o C#, não estava querendo vir para o outro lado, mas depois vou precisar ver algumas coisas em ASP ou Javascript tbm, não só para as mascaras, pois quero colocar uns pop ups.... tipo "Salvo com sucesso!!!" e um que vai mostrar os aniversariantes do dia assim que um funcionario abrir a intranet.

Comecei a mexer nisso meio que de curioso, e acho que não sei perguntar o que eu quero saber,,,rss não sei explicar direito o que quero.

Como eu disse no inicio, eu não sei quase nada sobre isso, estou procurando fazer da maneira correta.

Você me ajudou bastante com a exibição dos dados no grid view.
Responder

18/11/2015

Jothaz

Usando WebForms não é possível criar uma solução robusta usando somente C#. Windowsform aindavai mas Web você vai ter que apela para outras tecnologias.

Eu na minha ignorância recomendo o jQuery MaskEdit que simples e muito robusto. Veja um exemplo funcional.

Agora só você conhece seus pontos forte e fracos e sabe qual melhor caminho a seguir.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar