在我的ASP.NET项目中,我有一个GridView来显示时间(以及其他内容)。我正在使用Visual Studio 2012和PostgreSQL以及pgAdmin。
在数据库中,时间存储在tbl_tid中:
如果我在数据库中运行SQL或将时间打印到列表框,这也是它们的显示方式。
但是当我在GridView中显示时间时,它们会像这样出现:
那么,我如何在每一行中摆脱** 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>
答案 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";