Ano do campo data em um ListView

31/08/2009

Prezados;   Tenho em uma página um ListView que exibe um campo data no formato abaixo:   Gostaria de saber como faço para exibir somente o ano no ListView ao invés da data completa?   Se fosse um GridView sei que poderia usar uma função que convertesse a data para exibir somente o ano e no RowDatabound e passar esse valor para coluna do GridView.   Obrigado,   Indemberge
Indemberge Santos

Indemberge Santos

Curtidas 0

Respostas

Fabio Mans

Fabio Mans

31/08/2009

Para o Grid não é necessário fazer o que você faz.

Veja os exemplos abaixo.



<body>
    <form id="form1" runat="server">
    <div>
   
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
            <Columns>
                <asp:BoundField DataField="Id" HeaderText="Id" />
                <asp:BoundField DataField="Name" HeaderText="Name" />
                <asp:BoundField DataField="birth" HeaderText="Birth datetime" />
                <asp:BoundField DataField="birth" DataFormatString="{0:d}"
                    HeaderText="Birth date" />
            </Columns>
        </asp:GridView>
        <br />
        <br />
          
                     <asp:ListView ID="customerList" runat="server">
  
              
                        <LayoutTemplate>
                          <ul class="productlist">
                    
                                <div id="itemPlaceholder" runat="server"></div>
                          </ul>
                     
                        </LayoutTemplate>
                   
                        <ItemTemplate>
                        <li>
                        <%#Eval("Id") %> <br/> <%#Eval("Name") %> <br /> 
                        Somente data
                        <%# String.Format("{0:d}",Eval("Birth")) %> <br />
                        Data e hora
                        <%#Eval("Birth") %>
                        </li>
                       
                        </ItemTemplate>
                       
                     
   
                   </asp:ListView>
                  
                   
   
    </div>
    </form>
</body>





Vou criar uma lista para simular os dados vindos do banco. Em seguida faço o bind nos dois controles.





public partial class Data : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        List<Customer> collCustList = new List<Customer>();
        collCustList.Add(new Customer(99, "H", Convert.ToDateTime("27/08/2009 15:30:29")));
        collCustList.Add(new Customer(77, "B", Convert.ToDateTime("18/06/2009 15:30:29")));
        collCustList.Add(new Customer(55, "B", Convert.ToDateTime("15/07/2009 15:30:29")));
        collCustList.Add(new Customer(44, "R", Convert.ToDateTime("13/08/2009 15:30:29")));
        collCustList.Add(new Customer(22, "H", Convert.ToDateTime("27/08/2009 15:30:29" )));

        customerList.DataSource = collCustList;
        customerList.DataBind();


        GridView1.DataSource = collCustList;
        GridView1.DataBind();

    }
}




public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime Birth { get; set; }

    public Customer(int id, string name, DateTime birth)
    {
        this.Id = id;
        this.Name = name;
        this.Birth = birth;
      
    }



Resultado, perceba com hora e sem hora, ou seja o segredo é


No Grid
<asp:BoundField DataField="birth" DataFormatString="{0:d}"
                    HeaderText="Birth date" />


No List

  <%# String.Format("{0:d}",Eval("Birth")) %> <br />




Id Name Birth datetime Birth date 99 H 27/8/2009 15:30:29 27/8/2009 77 B 18/6/2009 15:30:29 18/6/2009 55 B 15/7/2009 15:30:29 15/7/2009 44 R 13/8/2009 15:30:29 13/8/2009 22 H 27/8/2009 15:30:29 27/8/2009

99
H
Somente data 27/8/2009
Data e hora 27/8/2009 15:30:29 77
B
Somente data 18/6/2009
Data e hora 18/6/2009 15:30:29 55
B
Somente data 15/7/2009
Data e hora 15/7/2009 15:30:29 44
R
Somente data 13/8/2009
Data e hora 13/8/2009 15:30:29 22
H
Somente data 27/8/2009
Data e hora 27/8/2009 15:30:29
Espero ter ajudado.
GOSTEI 0
Indemberge Santos

Indemberge Santos

31/08/2009

Fábio;   Obrigado!   Realmente no GridView é muito mais fácil.   Utilizei o Format.String mas só consegui exibir mês e ano, pois na página estou utilizando um ListView, veja a imagem:     <%# string.format("{0:Y}",Eval("DataLancamento")) %> Gostaria de exibir somente o ANO (Ex.: 2009), como faço isso?   Indemberge
GOSTEI 0
Fabio Mans

Fabio Mans

31/08/2009

Segue uma tabela para  seu auxílio     Basic number formatting specifiers: Specifier Type Format  Output (Passed Double 1.42) Output (Passed Int -12400)
c Currency {0:c} $1.42 -$12,400
d Decimal (Whole number) {0:d} System.FormatException -12400
e Scientific {0:e} 1.420000e+000 -1.240000e+004
f Fixed point {0:f} 1.42 -12400.00
g General {0:g} 1.42 -12400
n Number with commas for thousands {0:n} 1.42 -12,400
r Round trippable {0:r} 1.42 System.FormatException
x Hexadecimal {0:x4} System.FormatException cf90 Custom number formatting: Specifier Type Example  Output (Passed Double 1500.42) Note
0 Zero placeholder {0:00.0000} 1500.4200 Pads with zeroes.
# Digit placeholder {0:(#).##} (1500).42 
. Decimal point {0:0.0} 1500.4 
, Thousand separator {0:0,0} 1,500 Must be between two zeroes.
,. Number scaling {0:0,.}  2 Comma adjacent to Period scales by 1000.
% Percent {0:0%} 150042% Multiplies by 100, adds % sign.
e Exponent placeholder {0:00e+0} 15e+2 Many exponent formats available.
; Group separator see below
Dates
Note that date formatting is especially dependant on the system’s regional settings; the example strings here are from my local locale.
Specifier Type Example (Passed System.DateTime.Now)
d Short date 10/12/2002
D Long date December 10, 2002
t Short time 10:11 PM
T Long time 10:11:29 PM
f Full date & time  December 10, 2002 10:11 PM
F Full date & time (long) December 10, 2002 10:11:29 PM
g Default date & time 10/12/2002 10:11 PM
G Default date & time (long) 10/12/2002 10:11:29 PM
M Month day pattern December 10
r RFC1123 date string Tue, 10 Dec 2002 22:11:29 GMT
s Sortable date string 2002-12-10T22:11:29
u Universal sortable, local time 2002-12-10 22:13:50Z
U Universal sortable, GMT December 11, 2002 3:13:50 AM
Y Year month pattern December, 2002 The ‘U’ specifier seems broken; that string certainly isn’t sortable.
Custom date formatting:
Specifier Type Example  Example Output
dd Day {0:dd} 10
ddd Day name {0:ddd} Tue
dddd Full day name {0:dddd} Tuesday
f, ff, … Second fractions {0:fff} 932
gg, … Era {0:gg} A.D.
hh 2 digit hour {0:hh} 10
HH 2 digit hour, 24hr format {0:HH} 22
mm Minute 00-59 {0:mm} 38
MM Month 01-12 {0:MM} 12
MMM Month abbreviation {0:MMM} Dec
MMMM Full month name {0:MMMM} December
ss Seconds 00-59 {0:ss} 46
tt AM or PM {0:tt} PM
yy Year, 2 digits {0:yy} 02
yyyy Year {0:yyyy} 2002  (O que você precisa está nesta linha)
zz Timezone offset, 2 digits {0:zz} -05
zzz Full timezone offset {0:zzz} -05:00
: Separator {0:hh:mm:ss} 10:43:20
/ Separator {0:dd/MM/yyyy} 10/12/2002   Espero ter ajudado.   Fabio
GOSTEI 0
Indemberge Santos

Indemberge Santos

31/08/2009

Fábio;   Muito obrigado!   Era exatamente isso que eu precisava.   Indemberge
GOSTEI 0
POSTAR