C#Datagridview w / oledb连接日期列问题

时间:2016-04-07 14:48:54

标签: c# datagridviewcolumn oledbdataadapter

我已经研究了这个问题超过一天,阅读了很多帖子并尝试了很多格式化选项,但没有任何乐趣。基本上我是使用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" };
    }

1 个答案:

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