XAML 数据网格列格式持续时间大于 24 小时
XAML datagrid column format duration grater than 24 hours
我有一个从 MySQL 数据库获取数据的数据网格,其中一列表示总时间,例如 4.22:15:00
(4 天、22 小时、15 分钟、00 秒)
但是我希望输出为118:15:00
(118小时15分00秒)或者118:15
也可以。
我正在为该数据网格列使用此代码:
<DataGridTextColumn Header="HOURS" Binding="{Binding Hours}" />
这导致:
我已经为 StringFormat 属性 尝试了许多不同的可能性,例如:
StringFormat={}{0:hh':'mm}
但是我无法得到想要的输出...
对于后面的代码,我使用 VB。
您需要使用转换器。在转换器内部拆分数据并进行计算,例如天*24+小时...Return 字符串到网格。
它只是在 IValueConverter:
中解析字符串
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string str = value as string;
int idot = str.IndexOf(".");
int days = int.Parse(str.Substring(0,idot ));
int idotdot = str.IndexOf(":");
int ho = int.Parse(str.Substring(idot+1, idotdot-idot-1));
int newho = days * ho;
string res = newho.ToString() + str.Substring(idotdot);
return res;
}
您可能需要处理异常。
我有一个从 MySQL 数据库获取数据的数据网格,其中一列表示总时间,例如 4.22:15:00
(4 天、22 小时、15 分钟、00 秒)
但是我希望输出为118:15:00
(118小时15分00秒)或者118:15
也可以。
我正在为该数据网格列使用此代码:
<DataGridTextColumn Header="HOURS" Binding="{Binding Hours}" />
这导致:
我已经为 StringFormat 属性 尝试了许多不同的可能性,例如:
StringFormat={}{0:hh':'mm}
但是我无法得到想要的输出...
对于后面的代码,我使用 VB。
您需要使用转换器。在转换器内部拆分数据并进行计算,例如天*24+小时...Return 字符串到网格。
它只是在 IValueConverter:
中解析字符串 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string str = value as string;
int idot = str.IndexOf(".");
int days = int.Parse(str.Substring(0,idot ));
int idotdot = str.IndexOf(":");
int ho = int.Parse(str.Substring(idot+1, idotdot-idot-1));
int newho = days * ho;
string res = newho.ToString() + str.Substring(idotdot);
return res;
}
您可能需要处理异常。