【问题标题】:C# Datagridview w/oledb connection date column issuesC# Datagridview w/oledb 连接日期列问题
【发布时间】:2016-07-28 13:05:23
【问题描述】:

我已经研究这个问题一天多了,阅读了很多帖子并尝试了许多格式选项,但没有任何乐趣。本质上,我正在使用 OleDbDataAdapter 连接从数据库中填充数据网格视图。数据库中的日期列格式正确,但日期显示为非常大的双数(10 位)。 我尝试在 SQL 语句中创建一个新的格式化列,但只得到一个较短的数字(5 位),即选择 START_DATE, datepart(START_DATE) as SDATE format=date9。从表;因此,我得到的不是 1776772799,而是 20550 ...当我查看实际表时,格式化的值是 06APR2016:00:00:00 ... 或 06APR2016,使用 date9 数据库格式。 我的情况奇怪的是,每次“格式化”的尝试都只是将格式值作为字符串。我无法嵌入图像,但格式化的日期列显示 [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" };
    }

【问题讨论】:

  • 在这种情况下tablename 中的列是什么?只是这样我可以复制
  • 是一个SAS数据集,基本结构是:EVENT_END_DATE Num 8 DATETIME19。 EVENT_END_DATE EVENT_LAST_UPDATE Num 8 DATETIME19。 EVENT_LAST_UPDATE EVENT_START_DATE 数字 8 DATETIME19。 EVENT_START_DATE

标签: c# datagridviewcolumn oledbdataadapter


【解决方案1】:

我已经解决了我的问题并想发布答案。我在这里使用了一些建议Dave Swersky answer,非常感谢 Dave。唯一真正的区别是由于某种原因我的日期是基于 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;
}

【讨论】:

    猜你喜欢
    • 2011-12-02
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    相关资源
    最近更新 更多