LINQ查询绑定到gridview(日期问题)

时间:2011-02-18 20:58:06

标签: c# asp.net linq gridview

我对LINQ查询中的日期有疑问,该查询绑定到gridview。这是我正在使用的代码,没什么特别的,但问题是我无法格式化gridview中的日期(p.aktivnost.aktivnost.datum是日期),格式为“dd.MM.yyyy”。而它被显示为“dd.MMM.yyyy.0:00:00”,我想避免。

我试图寻找解决方案,但我找到的解决方案都没有用。唯一能让我获得部分成功的解决方案是当我使用“date = p.aktivnost.aktivnost_datum.Value.Day”时,但我无法添加其他值(月份和年份)。

令我难过,下面的代码是一个不起作用的想法。

  

日期=   p.aktivnost.aktivnost_datum.Value.Day   +“。” + p.aktivnost.aktivnost_datum.Value.month   +“。” + p.aktivnost.aktivnost_datum.Value.Day

现在,用于绑定数据的代码。 Gridview在页面加载时不包含任何列。

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";}

解决方案:

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});

2 个答案:

答案 0 :(得分:2)

在你的select ... new中写一下:

p.aktivnost.aktivnost_datum.ToString("dd.MM.yyyy")

修改

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 } );

答案 1 :(得分:1)

在你的Gridview显示代码中执行类似这样的操作

<asp:BoundField DataField="p.aktivnost.aktivnost.datum" 
    DataFormatString="{0:MM-dd-yyyy}" HtmlEncode="false" 
    HeaderText="p.aktivnost.aktivnost.datum" />

修改

试试这个:

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
};

或者像在另一个答案中提到的那样,你可以像在内存中那样正常地编辑它。

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
        });