我已经研究了这个问题超过一天,阅读了很多帖子并尝试了很多格式化选项,但没有任何乐趣。基本上我是使用OleDbDataAdapter连接从数据库填充datagridview。日期列在数据库中正确格式化,但日期是非常大的双数字(10位数)。 我尝试在SQL语句中创建一个新的格式化列,但只是得到一个较短的数字(5位数),即选择START_DATE,datepart(START_DATE)为SDATE格式= date9。从表;因此,我得到20550 ......而不是1776772799,当我查看实际表格时,格式化值为06APR2016:00:00:00 ...或06APR2016,日期为9数据库格式。 我的情况很奇怪的是,每一次尝试格式化#39;只需将格式值作为字符串。我无法嵌入图像,但格式化的日期列显示[dd / MMM / yyyy](或我尝试使用的任何格式),未格式化的列显示数字,即[1776772799]。 寻找一些想法。感谢
private void loadForm()
{
OleDbConnection conn3 = new OleDbConnection(conn3str);
string qEvent = "select * from tablename ;";
//string qEvent = select * , datepart(START_DATE) as SDate format=date9. from tablename ;
OleDbDataAdapter daEvent = new OleDbDataAdapter(qEvent, conn3);
DataSet dsEvent = new DataSet();
conn3.Open();
daEvent.Fill(dsEvent, "event_table");
conn3.Close();
dgvMngEvnts.DataSource = dsEvent;
dgvMngEvnts.DataMember = "event_table";
dgvMngEvnts.Rows[0].Selected = false;
//string dgvFormat = "dd/MMM/yyyy";
//dgvMngEvnts.Columns[4].DefaultCellStyle.Format = dgvFormat;
dgvMngEvnts.Columns[4].DefaultCellStyle.Format =@"dd/MMM/yyyy";
//dgvMngEvnts.Columns[4].DefaultCellStyle = new DataGridViewCellStyle { Format = "dd'/'MM'/'yyyy" };
}
答案 0 :(得分:0)
我已经解决了我的问题并希望发布答案。我在这里使用了一些建议Dave Swersky answer,非常感谢戴夫。唯一真正的区别是由于某些原因我的日期是基于1960而不是1970.我已经包括下面的代码。基本上我遵循了这个过程: 1-创建OLEDB连接,将所有数据导入数据表。 2-根据Dave的代码创建一个FixDate方法 3-添加其他列,然后遍历调用FixDate的表。 4-删除不需要的列,重新排序剩余的列。 谢谢@
private void loadForm()
{
public static DateTime FixDate(double timestamp)
{
DateTime origin = new DateTime(1960, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
return origin.AddSeconds(timestamp);
}
string query = "select * from eventTable ; ";
OleDbConnection conn3 = new OleDbConnection(conn3str);
OleDbDataAdapter daEvent = new OleDbDataAdapter(query, conn3);
conn3.Open();
DataSet dsEvent = new DataSet();
DataTable evTable = new DataTable();
conn3.Close();
daEvent.FillSchema(evTable, SchemaType.Source);
daEvent.Fill(evTable);
evTable.Columns.Add("StartDate", typeof(DateTime));
evTable.Columns.Add("EndDate", typeof(DateTime));
evTable.Columns.Add("LastUpDate", typeof(DateTime));
EnumerableRowCollection<DataRow> evRow = evTable.AsEnumerable();
for (int i=0; i <= evTable.Rows.Count -1; i++)
{
double dbDt1 = Convert.ToDouble(evTable.Rows[i]["START_DATE"]);
double dbDt2 = Convert.ToDouble(evTable.Rows[i]["END_DATE"]);
double dbDt3 = Convert.ToDouble(evTable.Rows[i]["LAST_UPDATE"]);
evTable.Rows[i]["StartDate"] = FixDate(dbDt1);
evTable.Rows[i]["EndDate"] = FixDate(dbDt2);
evTable.Rows[i]["LastUpDate"] = FixDate(dbDt3);
DateTime dbDtDt1 = Convert.ToDateTime(evTable.Rows[i]["StartDate"]);
DateTime dbDtDt2 = Convert.ToDateTime(evTable.Rows[i]["EndDate"]);
DateTime dbDtDt3 = Convert.ToDateTime(evTable.Rows[i]["LastUpDate"]);
}
evTable.Columns.Remove("START_DATE");
evTable.Columns.Remove("END_DATE");
evTable.Columns.Remove("LAST_UPDATE");
evTable.Columns["StartDate"].SetOrdinal(3);
evTable.Columns["EndDate"].SetOrdinal(4);
DataGridView1.DataSource = evTable;
}