Avatar billede kla Nybegynder
16. oktober 2006 - 21:04 Der er 14 kommentarer og
1 løsning

Formatering af Dato i et datagrid

Hej
Jeg har en XML med formattet
<courses>
  <course date="2006-12-12" title="xxx" lektioner="2" tid="10:00 - 12:00" />
<courses>
med et tilhørende schema
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="courses">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="course">
          <xs:complexType>
            <xs:attribute name="date" type="xs:date" use="required" />
            <xs:attribute name="title" type="xs:string" use="required" />
            <xs:attribute name="lektioner" type="xs:short" use="required" />
            <xs:attribute name="tid" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

når jeg sætter det op i et datagrid - vil jeg gerne have formateret datoen efter reglen
<asp:BoundField DataField="date" DataFormatString="{0:d}" HeaderText="Dato" ReadOnly="True"
                SortExpression="date" >
                <ItemStyle Width="100px" />
            </asp:BoundField>

mit problem er at jeg ikke tror at DataFormatString ikke tror der kommer en dato men en streng... nogen som kan fortælle mig hvordan jeg skal gøre i dette tilfælde?
Avatar billede neoman Novice
17. oktober 2006 - 23:11 #1
nu har jeg prøvet at læse din sidste sætning et par gange, og det kniber stadig for mig med at fatte den :-)  Hvad er problemet egentligt ? Får du fejlmeddelelser ? og i så fald hvad ? Hvad sker og hvad ønsker du der skulle ske ?
Avatar billede kla Nybegynder
18. oktober 2006 - 07:32 #2
okay lidt udybning...
selv om jeg sætter f.eks. DataFormatString="{0:D}" så er den ret ligeglad den bliver ved med at vise "2006-12-12" i dato-kolonen - jeg ville jo gerne have haft
"12 december 2006" til at komme frem.
Håber det giver lidt mere ide om hvad mit problem er!
Avatar billede snepnet Nybegynder
18. oktober 2006 - 16:39 #3
Prøv sådan her:

<asp:BoundField
  DataField="date"
  DataFormatString="{0:d}"
  HeaderText="Dato"
  ReadOnly="True"
  SortExpression="date"
  HtmlEncode="False" >
</asp:BoundField>

HtmlEncode="False" burde fikse det.

Mvh
Avatar billede kla Nybegynder
18. oktober 2006 - 17:36 #4
Nu har jeg sæt den op som du foreslog... men det slog ikke rigtig igennem :-(

<asp:BoundField
DataField="date"
DataFormatString="{0:D}"
HeaderText="Dato"
ReadOnly="True"               
SortExpression="date"
HtmlEncode="False" >
<ItemStyle Width="100px" />
</asp:BoundField>
Avatar billede kla Nybegynder
18. oktober 2006 - 19:58 #5
Jeg har været ude og finde ud af at der åbenbart kan været et problem med net.2.0 framworket omkring DataFormatString - skulle have fungeret okay i BETA 2 men ikke i RC1... i nogle tilfælde kan det hjælpe at sætte HtmlEncde = false, men åbenbart ikke i alle :-(
Avatar billede kla Nybegynder
18. oktober 2006 - 19:59 #6
Hvis jeg gerne selv vil formater feltet hvordan gør det så det? gerne med lidt kode da jeg er ret newbee på dette område :-)
Avatar billede snepnet Nybegynder
22. oktober 2006 - 21:47 #7
Det vil være meget normalt, at du abbonerer på event RowDataBound - og der tager fat i værdierne og piller ved dem.... Bruger du RC1?!? (hvorfor ikke en final)
Mvh
Avatar billede kla Nybegynder
23. oktober 2006 - 07:36 #8
Nej bruger da final, men der er problemet åbenbart stadig...
kan du give et eksempel på hvordan sådan en event RowDataBound kunne se ud... da jeg som sagt et lidt newbee i .net :-)
Avatar billede snepnet Nybegynder
23. oktober 2006 - 10:57 #9
Hov - jeg kan se at du benytter et DataGrid.... Hvordan kan det være?
Brug et GridView istedet.

Det her burde virke efter hensigten:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="Date" DataFormatString="{0:D}" HeaderText="Dato" HtmlEncode="False" />
    </Columns>
</asp:GridView>

DataSet ds = new DataSet();
ds.ReadXmlSchema(Server.MapPath("~/DataSchema.xsd"));
ds.ReadXml(Server.MapPath("~/Data.xml"));
GridView1.DataSource = ds;
GridView1.DataBind();

Mvh
Avatar billede kla Nybegynder
26. november 2006 - 16:12 #10
Så fik jeg tid til at kigge på sagen igen igen :-)

Jeg har lavet dato formateringen i min select statement, men nu er problemet at den dato jeg får ud er afhængig hvilket sprog serveren køre med...

Kan man selv bestemme hvilket sprog/land man gerne vil have lavet sin dato formatering efter?

/Kenneth
Avatar billede snepnet Nybegynder
26. november 2006 - 19:34 #11
Ja - det kan du godt.
Du skal dykke lidt ned i de localization features der er i .net.
Som udgangspunkt kan du selv sikre at din thread kører med en specific culture, hvilket vil medføre at dine dataoer og beløb bliver formatteret derefter.
Men ... Du kan også eksplicit angive det format du ønsker at anvende:
... Prøv at se om det her går godt:
DataFormatString="{0:yyyy-MM-dd}"
Mvh
Avatar billede kla Nybegynder
27. november 2006 - 20:01 #12
Jeg har nu tilføjet dette til min web.config
<globalization fileEncoding="iso-8859-1" requestEncoding="iso-8859-1" responseEncoding="iso-8859-1" culture="da-DK" uiCulture="da-DK" />

Men det slå tilsyneladene ikke igennem når det drejer sig om min sql...

Kan man i sql'et fortælle hvilket sprog/format man ønsker tilbage (det er en access db) :-(

SelectCommand="SELECT FORMAT(Dato_1, 'long Date') AS sDate, FORMAT(Dato_2, 'long Date') AS eDate, Format(startTid_1, 'SHORT TIME') AS sTime, Format(startTid_2, 'SHORT TIME') AS eTime, Format(slutTid_1, 'SHORT TIME') AS slutTid1, Format(slutTid_2, 'SHORT TIME') AS slutTid2 FROM jcpCurseDates WHERE (Dato_1 > NOW()) ORDER BY Dato_1">
Avatar billede snepnet Nybegynder
28. november 2006 - 01:07 #13
Hej igen.

Hvis du har en grid som dette:

<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="Date" DataFormatString="{0:D}" HeaderText="Dato" HtmlEncode="False" />
    </Columns>
</asp:GridView>

Og noget kode som dette:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<SomeClass> liste = new List<SomeClass>();
            liste.Add(new SomeClass());
            liste.Add(new SomeClass());
            liste.Add(new SomeClass());
            GridView1.DataSource = liste;
            GridView1.DataBind();
        }
    }
}

public class SomeClass
{
    private DateTime m_Date = DateTime.Now;

    public DateTime Date
    {
        get { return m_Date; }
        set { m_Date = value; }
    }
}

Altså databinding til en liste af objekter der har en DateTime property ... Så er der ingen ballade med at få formateret iht. et sprog.

Med ovenstående vil du få en præsentation af datoen iht. til den culture du specificerer i din web.config.

Ønsker du et særlig format, kan du også angive det som vist 26/11-2006 19:34:13

Jeg synes ikke du skal bikse rundt med det i dine selects.

Men ... Skal din formattering ligge fast - eller er det noget der skal være afhængig af brugervalg/browserindstillinger?

Mvh
Avatar billede kla Nybegynder
28. november 2006 - 18:26 #14
Så har jeg fået skidtet til at virke - og du har vist fortjent dine point :-)
/Kenneth
Avatar billede snepnet Nybegynder
28. november 2006 - 20:52 #15
Jamen så får du da et svar :o)
Mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester