如何格式化DataGrid单元格,使SQL中的时间条目显示为hh:mm-tt



如果我的SQL表中的条目是09:00:00,我的单元格要么显示为类似09:00:00的内容,要么我输入了类似以下的字符串格式:

<DataGridTextColumn Binding="{Binding Path=tin, StringFormat={0:hh\:mm}}"  Header="Time In:"/>

我有9点。如何将其格式化为"09:00 AM"这样的短时间字符串?

我尝试过使用StringFormat=t,它会使单元格变为空白。如果使用"t",单元格将变为空白。我在这里真的很为难。

DataGrid中填充了一个名为displayGrid的数据集。entryGrid是DataGrid对象
entryGrid.ItemsSource=displayGrid.Tables[0].DefaultView;

我在这里寻找的是在XAML中加入什么来正确格式化它。我需要从SQL 2008表中的09:00:00到数据网格中的09:00AM。我在VS 2012中使用C#.Net和XAML。我对编码非常陌生,所以我确信这是一个简单的错误或语法错误。谢谢你能提供的任何帮助。

编辑:

我甚至回去了,尝试用以下代码自动生成列来格式化单元格:

private void ResultsDataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyType == typeof(DateTime))
{
DataGridTextColumn dataGridTextColumn = e.Column as DataGridTextColumn;
if (dataGridTextColumn.Header.ToString().Equals("wkdate"))
{
dataGridTextColumn.Binding.StringFormat = "{0:d}";
}
if(dataGridTextColumn.Header.ToString().Equals("tin"))
{
dataGridTextColumn.Binding.StringFormat = "{0:t}";
}
}
}

适用于日期,但不适用于时间!这让我发疯了。提前感谢!

根据您的格式,您可以更新现有的XAML代码并编写如下:

<DataGridTextColumn Binding="{Binding Path=tin, StringFormat={0:hh:mm tt}}"  Header="Time In:"/>

希望这能帮助

或者,你能给你下面的吗。我确信这是有效的,因为我已经在许多项目中使用过它。

CS文件代码:

[ValueConversion(typeof(DateTime), typeof(string))]
public class StringTime : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || value.ToString() == "")
{
return "";
}
String str = ((DateTime)value).ToString("hh:mm tt");
return str;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || value.ToString() == "")
{
return value;
}
DateTime dtr = DateTime.MinValue.Date;
dtr = dtr.AddYears(1899);
if (value == null)
return dtr;
dtr = dtr.AddHours(double.Parse((value.ToString().Substring(0, 2))));
dtr = dtr.AddMinutes(double.Parse((value.ToString().Substring(3, 2))));
if(value.ToString().Substring(7, 2) == "PM")
dtr = dtr.AddHours(12);
return dtr;
}
#endregion
}

XAML文件:

<Page.Resources>
<custom:StringTime x:Key="StringTime" />
</Page.Resources>
DataGrid Column Code:
<DataGridTextColumn Binding="{Binding Path=tin, Converter={StaticResource StringTime}}"  Header="Time In:"/>

如果你有任何问题,请告诉我。

最新更新