我使用数据填充数据网格视图,其中一列应显示为时间,即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";
答案 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;
}
}
}