Jump to content
kombypetras

Apresentação de dados num DataGrid

Recommended Posts

kombypetras

Boas Tardes a todos.

Antes de mais quero desejar um bom ano a todos.

Bem pessoal a minha duvida é a seguinte.

Estou a desenvolver uma aplicação de gestao de sócios em que guardo toda a info numa base de dados.

Numa fase da minha aplicação existe uma apresentação dos socios numa tabela e um dos campos é uma data, o problema surge nesta fase porque é apresentada a data da seguinte forma:(podem verificar na imagem seguinte)

datagridd.jpg

O que eu queria era em vez de aparecer a data na forma dd-mm-aaaa hh:mm am queria que aparecesse somente dd-mm-aaaa.

Nao sei se me fiz entender mas fico grato por uma ajuda.

Obrigado.

Share this post


Link to post
Share on other sites
kombypetras

Olá Sara.

Já estive a tentar perceber o que me explicaste e fiquei com muitas dúvidas em como proceder e resolver o problema.

Para apresentar os dados na datagrid tenho o seguinte código

dt1 = new DataTable();
            sqlConn = (SqlConnection)ligacao.getSqlConn();
            sqlConn.Open();                    
            da = new SqlDataAdapter("SELECT socioID AS Número, nome AS Nome,morada AS Morada, localidade AS Localidade, estado AS Estado, dataadminssao AS Admitido FROM Socio", sqlConn);
            try
            {
                da.Fill(dt1);
            }
            catch (SqlException ex)
            {
                new Mensagem(ex.ToString()).Show();
            }
            dt1.DefaultView.Sort = "Número";
            dgrid1.ItemsSource = dt1.DefaultView;
            sqlConn.Close();

Será que me poderias esclarecer um pouco melhor???

Obrigado.

Share this post


Link to post
Share on other sites
kombypetras

Continuo sem conseguir resolver já testei várias situações mas não funcionou não sei o k se passa.

Share this post


Link to post
Share on other sites
filipe3632

Eu acho que estão todos a complicar, e que isso será só mudares as propriedades daquele campo, tipo a mascara ... mas não sei tambem... isso aconteceu-me uma vez também, mas era num report, era diferente.


Peace, Love & Empathy by: Kurt Cobain

Share this post


Link to post
Share on other sites
filipe3632

Desculpem, eu pensava que estava em visual basic, mas acho que o silverlight deve funcionar da mesma maneira, agora nao sei...


Peace, Love & Empathy by: Kurt Cobain

Share this post


Link to post
Share on other sites
saramgsilva

Continuo sem conseguir resolver já testei várias situações mas não funcionou não sei o k se passa.

Tens que explicar melhor o que está acontecer. A informação aparece na datagrid? ou neste momento não aparece nada?

E as colunas onde estás a definir?

Vê este exemplo

------------

Só vi agora a imagem da dataGrid, penso que não estás a definir as colunas e está a usar a definição automática. A resolução passa por criar as colunas que precisas em xaml, criares o binding correspondente e na coluna do tipo datetime, aplicas um converter...

Share this post


Link to post
Share on other sites
RJ90

Usa o método ToShortDateString().

Cumprimentos!


Samsung 700Z5A-S01PT Samsung Ominia W

ᥡ What Else? ᥡ

Share this post


Link to post
Share on other sites
kombypetras

Vou tentar explicar um pouco melhor o que tenho feito e o que eu pretendo que seja diferente.

O que eu tenho é uma DataGrid que utilizo do WPFToolkit e o que eu quero é apresentar nessa datagrid os dados que estão armazenados numa base de dados e para isso utilizo o seguinte método.

private void escreverDataGridView()
        {
            dt1 = new DataTable();
            sqlConn = (SqlConnection)ligacao.getSqlConn();
            sqlConn.Open();
            da = new SqlDataAdapter("SELECT socioID AS Número, nome AS Nome,morada AS Morada, localidade AS Localidade, estado AS Estado, convert(datetime, '@dataadmissao', 3) AS Admitido FROM Socio", sqlConn);
            try
            {
                da.Fill(dt1);
            }
            catch (SqlException ex)
            {
                new Mensagem(ex.ToString()).Show();
            }
            dt1.DefaultView.Sort = "Número";
            dgrid1.ItemsSource = dt1.DefaultView;
            sqlConn.Close();
        }

Note-se que utilizo o convert e não dá a mesma. O que eu quero é que a Data apareça sob a forma de dd/mm/aaaa.

Para a DataGrid tenho o seguinte

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" 
        xmlns:Custom="http://schemas.microsoft.com/wpf/2008/toolkit"
        xmlns:System_Windows_Forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
        xmlns:vhDatePicker="clr-namespace:vhDatePicker;assembly=vhDatePicker"
        x:Class="GestAssoc.Socios.PesquisarSocios"
        x:Name="Window" Title="Pesquisa de Sócios" Height="600" Width="1000" Opacity="1" 
        ResizeMode="NoResize" Icon="/GestAssoc;Component/Imagens/tcaicon.png" 
        WindowStartupLocation="CenterScreen" WindowStyle="None" AllowsTransparency="True" Background="{x:Null}">
    <Window.Resources>
...
....
.....


        <Style x:Key="cellStyle" TargetType="{x:Type Custom:DataGridCell}">
         ..
         ..
        </Style>

        <Style x:Key="rowStyle" TargetType="{x:Type Custom:DataGridRow}">
          ..
          ..
          ..
        </Style>

        <Style x:Key="columnHeaderStyle" TargetType="{x:Type Custom:DataGridColumnHeader}">
          ...
          ..		
    	</Style>


</Window.Resources>

....
...
....

<Canvas x:Name="canvas" Margin="207,62,0,30" Grid.Column="1" RenderTransformOrigin="0.5,0.5">
        	<Canvas.RenderTransform>
        		<TransformGroup>
        			<ScaleTransform/>
        			<SkewTransform/>
        			<RotateTransform/>
        			<TranslateTransform/>
        		</TransformGroup>
        	</Canvas.RenderTransform>
        	<Custom:DataGrid x:Name="dgrid1" IsReadOnly="True"
        		Grid.Column="1" d:LayoutOverrides="GridBox" RowDetailsVisibilityMode="VisibleWhenSelected"
        		HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" 
        		SelectionMode="Extended" CanUserReorderColumns="True" CanUserResizeColumns="False" 
        		CanUserSortColumns="True" AutoGenerateColumns="True"
        		CanUserResizeRows="False" CanUserAddRows="False" CanUserDeleteRows="False"
        		CellStyle="{StaticResource cellStyle}"
        		ColumnHeaderStyle="{StaticResource columnHeaderStyle}" 
        		RowStyle="{StaticResource rowStyle}" 
        		BorderBrush="{x:Null}" Background="Transparent" Foreground="{x:Null}"
        		HorizontalGridLinesBrush="{x:Null}" VerticalGridLinesBrush="{x:Null}" 
        		HeadersVisibility="Column" TextBlock.TextAlignment="Center" Margin="2"
        		HorizontalContentAlignment="Center" />
        </Canvas>

Se alguem conseguir ajudar agradeço.

obrigado.

Share this post


Link to post
Share on other sites
saramgsilva

Ta difícil. Não consigo por isto a funcionar!!!!

Já disse várias vezes que tens que definir as colunas da datagrid e o que estas a fazer

AutoGenerateColumns="True"

Vê este exemplo:

WPF Toolkit: DataGrid Feature Walkthrough

Columns Types

Olha nesse exemplo até se trata da questão de dateTimes.

Espero que desta vez a coisa já venha a funcionar.

Nota: Penso que só tens que definir as colunas, de resto parece ok.

Share this post


Link to post
Share on other sites
filipe3632

é so as propriedades da coluna.. já disse que estão a complicar Xd


Peace, Love & Empathy by: Kurt Cobain

Share this post


Link to post
Share on other sites
saramgsilva

é so as propriedades da coluna.. já disse que estão a complicar Xd

A questão é que ele não percebeu o que estou a tentar dizer, desde o inicio  :)

Esta linha de código não está bem:

            da = new SqlDataAdapter("SELECT socioID AS Número, nome AS Nome,morada AS Morada, localidade AS Localidade, estado AS Estado, convert(datetime, '@dataadmissao', 3) AS Admitido FROM Socio", sqlConn);

a correcta é a que tinhas!!!!

  da = new SqlDataAdapter("SELECT socioID AS Número, nome AS Nome,morada AS Morada, localidade AS Localidade, estado AS Estado, dataadminssao AS Admitido FROM Socio", sqlConn);

Agora na tua Datagrid tens que definir no XAML as várias colunas que vais apresentar e estão contidas na dataTable.

<Canvas x:Name="canvas" Margin="207,62,0,30" Grid.Column="1" RenderTransformOrigin="0.5,0.5">
                <Canvas.RenderTransform>
                        <TransformGroup>
                                <ScaleTransform/>
                                <SkewTransform/>
                                <RotateTransform/>
                                <TranslateTransform/>
                        </TransformGroup>
                </Canvas.RenderTransform>
                <Custom:DataGrid x:Name="dgrid1" IsReadOnly="True"
                        Grid.Column="1" d:LayoutOverrides="GridBox" RowDetailsVisibilityMode="VisibleWhenSelected"
                        HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"
                        SelectionMode="Extended" CanUserReorderColumns="True" CanUserResizeColumns="False"
                        CanUserSortColumns="True" AutoGenerateColumns="False"
                        CanUserResizeRows="False" CanUserAddRows="False" CanUserDeleteRows="False"
                        CellStyle="{StaticResource cellStyle}"
                        ColumnHeaderStyle="{StaticResource columnHeaderStyle}"
                        RowStyle="{StaticResource rowStyle}"
                        BorderBrush="{x:Null}" Background="Transparent" Foreground="{x:Null}"
                        HorizontalGridLinesBrush="{x:Null}" VerticalGridLinesBrush="{x:Null}"
                        HeadersVisibility="Column" TextBlock.TextAlignment="Center" Margin="2"
                        HorizontalContentAlignment="Center" >

<Custom:DataGrid.Columns>
       <Custom:DataGridTextColumn Header="No." 
                                           Binding="{Binding Numero}" />
	<Custom:DataGridTextColumn Header="Nome" 
                                           Binding="{Binding Nome}"  />
	<Custom:DataGridTextColumn Header="Morada" 
                                           Binding="{Binding Morada}" />
	<Custom:DataGridTextColumn Header="Localidade" 
                                           Binding="{Binding Localidade}"  />
        <Custom:DataGridTextColumn Header="Admitido" 
                                       Binding="{Binding Admitido, StringFormat=d}" />
        <Custom:DataGridTextColumn Header="Estado"
                                           Binding="{Binding Estado}"/>
    </Custom:DataGrid.Columns>
</Custom:DataGrid >
        </Canvas>

Não estou a usar um converter porque estou a usar o StringFormat! Mas poderias criar a tua classe que implementaria o IValueConverter e criares o teu conversor, que depois seria definido no Binding...

Não testei o código, mas há-de ser algo do género.

Outro exemplo que podes ver: http://www.dev102.com/2009/05/28/formatting-your-wpf-data-stringformat-is-in-the-house/

Share this post


Link to post
Share on other sites
kombypetras

Já testei essa forma e ta a funcionar. Percebi quando me disseste que tinha a opção AutoGenerateColumns="True".

Muito Obrigado Sara pelas dicas e pela ajuda, agora já percebi o meu erro, estava a dar a opção de o DataGrid definir as Colunas automaticamente e depois não dava para aceitar outros formatos.

Muito Obrigado.

Share this post


Link to post
Share on other sites
saramgsilva

Já testei essa forma e ta a funcionar. Percebi quando me disseste que tinha a opção AutoGenerateColumns="True".

Muito Obrigado Sara pelas dicas e pela ajuda, agora já percebi o meu erro, estava a dar a opção de o DataGrid definir as Colunas automaticamente e depois não dava para aceitar outros formatos.

Muito Obrigado.

Ainda bem que já conseguiste e acho que devias estudar um pouco de teorica, para perceberes melhor como as coisas funcionam, senão andas a nora e perdes o triplo do tempo :)

Aconcelho-te a veres bem questões relacionadas com Binding, IValueConverter... eu dei-te vários exemplos concreto, que poderão ajudar!

Bom trabalho!

Share this post


Link to post
Share on other sites
kombypetras

Olha sara já agora e sei que não é o tópico adequado mas será que me poderias aconselhar livros ou artigos teoricos para poder estudar essas questões e perceber muito bem como funciona tudo isto.

Share this post


Link to post
Share on other sites
saramgsilva

Olha sara já agora e sei que não é o tópico adequado mas será que me poderias aconselhar livros ou artigos teoricos para poder estudar essas questões e perceber muito bem como funciona tudo isto.

Consulta o meu artigo sobre certificação microsoft, tenho lá uns livros de WPF que aconcelho: artigo

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.