GridView ASP.NET C中丑陋的时间格式

时间:2014-05-10 10:56:07

标签: c# asp.net sql postgresql gridview

在我的ASP.NET项目中,我有一个GridView来显示时间(以及其他内容)。我正在使用Visual Studio 2012和PostgreSQL以及pgAdmin。

在数据库中,时间存储在tbl_tid中:

enter image description here

如果我在数据库中运行SQL或将时间打印到列表框,这也是它们的显示方式。

但是当我在GridView中显示时间时,它们会像这样出现: enter image description here

那么,我如何在每一行中摆脱** 0001-01-01 **(它来自哪里?)。

在我的代码背后:

            string sql = "SELECT tid FROM tbl_tid";
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);  
            ds.Reset();                 
            da.Fill(ds);                
            dt = ds.Tables[0];          
            GridView1.DataSource = dt;  
            GridView1.DataBind();

在我的asp.net中

                    <asp:GridView ID="GridView1" runat="server" OnRowDataBound="OnRowDataBound" Height="118px" Width="390px">
                    <Columns>
                    <asp:TemplateField >
                         <HeaderTemplate>
                             <input id="chkAll" onclick="SelectAllCheckboxes(this);" runat="server" type="checkbox" />                                        
                         </HeaderTemplate>            
                         <ItemTemplate>
                             <asp:CheckBox ID="myCheckBox" runat="server" /> 
                         </ItemTemplate>
                    </asp:TemplateField>
                    </Columns>
                    </asp:GridView>

脚本:

<script src='http://code.jquery.com/jquery-latest.min.js' type='text/javascript'> </script>
<script>      
function SelectAllCheckboxes(chk) {
     $('#<%=GridView1.ClientID%>').find("input:checkbox").each(function () {
         if (this != chk) {
             this.checked = chk.checked;
         }
     });
}
</script>

3 个答案:

答案 0 :(得分:5)

为什么时间会出现在“0001-01-01”中?

.NET框架正在将PostGreSql时间字段转换为Standard DateTime。由于没有涉及实际日期,.NET假设与时间相关的日期为DateTime.MinValue,即0001年1月1日。

如何摆脱ASP.NET网格中的日期部分?

您可以格式化DateTime,以便不显示日期部分。 .NET DateTime值非常容易格式化,但您需要告诉ASP.NET如何明确地执行此操作。一种技术是在网格中使用boundfield:

<asp:boundfield datafield="TheNameOfYourDateColumn" 
                dataformatstring="{0:H:mm:ss}" 
                htmlencode="false" />

您也可以像使用复选框一样使用TemplateField。还有很多Format Strings for DateTimes你应该可以利用它。

答案 1 :(得分:1)

我使用此代码解决了它:

   protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            int columnIndex = 0;
            foreach (DataControlFieldCell cell in e.Row.Cells)
            {
                if (cell.ContainingField is BoundField)
                    if (((BoundField)cell.ContainingField).DataField.Equals("tid"))
                        break;
                columnIndex++;
            }
            string columnValue = e.Row.Cells[columnIndex].Text;              
            string[] splitString = columnValue.Split(' ');
            string tid = splitString[1];
            e.Row.Cells[columnIndex].Text = tid.Remove(5,3);
        }          
    }  

答案 2 :(得分:1)

如果要选择时间作为字符串,请使用to_char()

string sql = "SELECT to_char(tid, 'HH12:MI:SS') AS tid FROM tbl_tid";

演示:http://sqlfiddle.com/#!15/e3bcb/5