Reputation: 3710
I have problem regarding date in LINQ query which is binded to a gridview. This is the code I'm using, nothing special, but the problem is I can't format the date (p.aktivnost.aktivnost.datum is date) in gridview to be formatted like "dd.MM.yyyy." and instead it is being shown as "dd.MMM.yyyy. 0:00:00" which I want to avoid.
I've tried to search for the solution, but none of the solutions I've found were helpful. The only solution that gave me partial success was when I used "date = p.aktivnost.aktivnost_datum.Value.Day", but then I was unable to add the other values (for month and for year).
As I sad, the following code was an idea that didn't work.
date = p.aktivnost.aktivnost_datum.Value.Day + "." + p.aktivnost.aktivnost_datum.Value.month + "." + p.aktivnost.aktivnost_datum.Value.Day
Now, the code used for binding data. Gridview doesn't contain any columns on page load.
var predavaci = from p in db.predavacs
where p.osoba_id == idOsoba
orderby p.osoba.osoba_prezime
select new { p.aktivnost.tema.tema_naziv, p.aktivnost.ciklu.ciklus_naziv, p.aktivnost.podciklu.naziv_podciklus, p.aktivnost.aktivnost_datum, p.aktivnost.mjesto.mjesto_naziv, p.aktivnost.ciljana_grupa.ciljana_grupa_naziv };
gvIzvjestaj.DataSource = predavaci;
DataBind();
gvIzvjestaj.HeaderRow.Cells[0].Text = "Naziv aktivnosti";
gvIzvjestaj.HeaderRow.Cells[1].Text = "Ciklus";
gvIzvjestaj.HeaderRow.Cells[2].Text = "Podciklus";
gvIzvjestaj.HeaderRow.Cells[3].Text = "Datum";
gvIzvjestaj.HeaderRow.Cells[4].Text = "Mjesto";
gvIzvjestaj.HeaderRow.Cells[5].Text = "Ciljna grupa";}
Solution:
gvIzvjestaj.DataSource = predavaci.ToList().Select(p => new { p.tema_naziv, p.ciklus_naziv, p.naziv_podciklus, datum = p.aktivnost_datum.Value.Day + "." + p.aktivnost_datum.Value.Month + "." + p.aktivnost_datum.Value.Year + ".",p.mjesto_naziv,p.ciljana_grupa_naziv});
Upvotes: 0
Views: 1047
Reputation: 9815
In your Gridview display code do something like this
<asp:BoundField DataField="p.aktivnost.aktivnost.datum"
DataFormatString="{0:MM-dd-yyyy}" HtmlEncode="false"
HeaderText="p.aktivnost.aktivnost.datum" />
EDIT
Try this:
var predavaci = from p in db.predavacs
where p.osoba_id == idOsoba
orderby p.osoba.osoba_prezime
select new
{
p.aktivnost.tema.tema_naziv,
p.aktivnost.ciklu.ciklus_naziv,
p.aktivnost.podciklu.naziv_podciklus,
aktivnost_datum = new {
string.Format("{0}.{1}.{2}",
p.aktivnost.aktivnost_datum.Day,
p.aktivnost.aktivnost_datum.Month,
p.aktivnost.aktivnost_datum.Year)
},
p.aktivnost.mjesto.mjesto_naziv,
p.aktivnost.ciljana_grupa.ciljana_grupa_naziv
};
Or like mentioned in another answer, you're free to edit the collection like normal once it's in memory.
gvIzvjestaj.DataSource =
predavaci.ToList().Select(q =>
new {
q.aktivnost.tema.tema_naziv,
q.aktivnost.ciklu.ciklus_naziv,
q.aktivnost.podciklu.naziv_podciklus,
q.aktivnost.aktivnost_datum.ToString("dd.MM.yyyy"),
q.aktivnost.mjesto.mjesto_naziv,
q.aktivnost.ciljana_grupa.ciljana_grupa_naziv
});
Upvotes: 1
Reputation: 120937
In your select ... new
just write:
p.aktivnost.aktivnost_datum.ToString("dd.MM.yyyy")
EDIT:
var predavaci = (from p in db.predavacs
where p.osoba_id == idOsoba
orderby p.osoba.osoba_prezime).ToList().Select(p =>
new { p.aktivnost.tema.tema_naziv, p.aktivnost.ciklu.ciklus_naziv, p.aktivnost.podciklu.naziv_podciklus, p.aktivnost.aktivnost_datum, p.aktivnost.mjesto.mjesto_naziv, p.aktivnost.ciljana_grupa.ciljana_grupa_naziv } );
Upvotes: 2