格式化Datagridview列到时间只显示hh:mm:ss

时间:2016-07-15 13:34:12

标签: c# datetime datagridview access

我使用数据填充数据网格视图,其中一列应显示为时间,即hh:mm:ss。

数据从Access数据库中提取,并成功填充到datagridview中。我想要显示为时间的列在访问数据库中填充为" Number"。正如您将看到的那样,我在选择查询中使用/ 86400将其转换为秒。

当我尝试使用DefaultCellStyle.Format =" hh:mm:ss tt"转换列时,整个数据列将被替换为" hh:mm:ss tt&#34 ;在每个单元格中,即不再有数字,每个单元格中只有hh:mm:ss tt。

以下是我的代码 - 任何人都可以告知我做错了吗?

string strProvider =
    "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = P:\\JC_StockFile\\Mitel\\Mitel.accdb";
string strSql =
    "SELECT [MidnightStartDate], [Agent Name], [LoginTime], [LogoutTime], [ShiftDuration]/86400 as ShiftDuration " +
    "FROM login_data " +
    "WHERE [MidnightStartDate] > @LeDate";

OleDbConnection con = new OleDbConnection(strProvider);
OleDbCommand cmd = new OleDbCommand(strSql, con);
con.Open();
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@LeDate", DateTime.Today.AddDays(-3) );
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTable scores = new DataTable();
da.Fill(scores);
dataGridView1.DataSource = scores;
dataGridView1.Columns["ShiftDuration"].DefaultCellStyle.Format = "hh:mm:ss tt";

2 个答案:

答案 0 :(得分:0)

我相信这个属性的工作方式与其他String Formats类似。编辑:我认为你实际上只是一个大写问题:

试试这个:

dataGridView1.Columns["ShiftDuration"].DefaultCellStyle.Format = "HH:mm:ss";

参考: https://msdn.microsoft.com/en-us/library/zdtaw1bw(v=vs.110).aspx

答案 1 :(得分:0)

Microsoft建议使用CellFormatting事件

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    // If the column is the ShiftDuration column, check the
    // value.
    if (this.dataGridView1.Columns[e.ColumnIndex].Name == "ShiftDuration")
    {
        ShortFormDateFormat(e);
    }
}

private static void ShortFormDateFormat(DataGridViewCellFormattingEventArgs formatting)
{
    if (formatting.Value != null)
    {
        try
        {
            DateTime theDate = DateTime.Parse(formatting.Value.ToString());
            String dateString = theDate.toString("hh:mm:ss tt");    
            formatting.Value = dateString;
            formatting.FormattingApplied = true;
        }
        catch (FormatException)
        {
            // Set to false in case there are other handlers interested trying to
            // format this DataGridViewCellFormattingEventArgs instance.
            formatting.FormattingApplied = false;
        }
    }
}