实体框架 - 在Gridview

时间:2017-08-10 19:12:50

标签: c# sql asp.net entity-framework format

我已经看过许多如何使用Entity Framework填充网格视图的示例。但是,在将结果填充到网格视图之前,我正在努力弄清楚如何操作数据。我发现工作的唯一另一种方法是创建一个SQL存储过程并在那里进行格式化。但是,寻找一种我可以直接从表中读取而无需存储过程的解决方案。

我基本上有一个简单的网格视图,其中包含两列(日,时间),其数据如下所示:

使用Entity Framework填充此数据时,时间为24 HR格式。我希望它们以12种HR格式显示。

这是我目前的代码。

try
{
    using (DemoEntities context = new DemoEntities())
    {
        grdMonday.DataSource = context.TimeSlots.Where(t => t.numericDay == 2).ToList();
        grdMonday.DataBind();
    }
}
catch (Exception ex)
{
    var errMsg = ex.Message;
}

1 个答案:

答案 0 :(得分:0)

对于有类似问题的任何人,这里是我如何达到预期结果的代码。来自DB的数据采用SQL TIME(7)格式。所以我必须先转换为日期时间,以便正确格式化字符串。

GridView的:

<asp:GridView runat="server" ID="grdMonday" CssClass="table" AutoGenerateColumns="false">
      <Columns>
          <asp:BoundField DataField="day" HeaderText="Day Name" />
          <asp:TemplateField HeaderText="Time">
              <ItemTemplate>
                  <asp:Label runat="server" Text='<%# FormatTime(Eval("time")) %>'></asp:Label>
              </ItemTemplate>
          </asp:TemplateField>
       </Columns>
       <EmptyDataTemplate>
            No Times Found.
       </EmptyDataTemplate>
 </asp:GridView>

功能背后的代码:

protected string FormatTime(object timeValue)
{
   if (Convert.IsDBNull(timeValue))
   {
      return "";
   }
   else
   {
      TimeSpan asTime = (TimeSpan)timeValue;
      DateTime asDate = Convert.ToDateTime(asTime.ToString());
      string time = asDate.ToString("%h:mmtt");

      return time;
    }
 }

结果:(我没有足够的重复点来显示图像......) Result