我正在开发一个为整个应用程序设置默认区域性的应用程序。
static void Main()
{
try
{
#region set date pattern for whole application
try
{
CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.DateTimeFormat.ShortDatePattern = System.Configuration.ConfigurationManager.AppSettings["ShortDateFormat"];
culture.DateTimeFormat.LongDatePattern = System.Configuration.ConfigurationManager.AppSettings["LongDateFormat"];
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
}
catch (Exception ex)
{
RCOP.SmartClient.General.SaveLog(ex);
}
#endregion
}
....
}
日期时间格式未应用于datatables
,并且datatables
中的日期列具有计算机中设置的日期格式,如果用户更改计算机datetime
格式,则会导致异常。所以我必须对单个datatables
dataTable.Locale.DateTimeFormat.ShortDatePattern = Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern;
dataTable.Locale.DateTimeFormat.LongDatePattern = Thread.CurrentThread.CurrentCulture.DateTimeFormat.LongDatePattern;
问题是我必须在使用datatables
的整个应用程序中应用上述设置(超过200个位置,因为Win应用程序非常大)。
如何在一处应用datetime
设置,以使所有datatables
都具有与默认区域性设置相同的datetime
格式。
答案 0 :(得分:1)
您可以将自定义DataTable
的自定义culture
始终设置为ShortDatePattern
,因为您的DataTable
格式仅用于显示日期和{{1} }不是Locale
,它不能在应用程序中全局继承或覆盖,每个static
都有自己的DataTable
。
因此,请执行以下操作:
DateTimeFormat
,并在整个应用程序中将所有[Serializable]
public class MyDataTable : DataTable
{
void SetCulture()
{
this.Locale.DateTimeFormat.ShortDatePattern = Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern;
this.Locale.DateTimeFormat.LongDatePattern = Thread.CurrentThread.CurrentCulture.DateTimeFormat.LongDatePattern;
}
public MyDataTable()
: base()
{
SetCulture();
}
public MyDataTable(string tableName)
: base(tableName)
{
SetCulture();
}
public MyDataTable(string tableName, string tableNamespace)
: base(tableName, tableNamespace)
{
SetCulture();
}
/// <summary>
/// Needs using System.Runtime.Serialization;
/// </summary>
public MyDataTable(SerializationInfo info, StreamingContext context)
: base(info, context)
{
SetCulture();
}
}
替换为DataTable
。
或这样做:
MyDataTable
但第一个示例更好。
答案 1 :(得分:0)
有很多方法可以声明可以在整个应用程序中使用的数据表。您可以通过创建具有DataTable属性的静态类并在应用程序中的任何位置访问它来使用Singleton。另一个是可以通过将包含DataTable属性的类的实例注入到类构造函数中来使用依赖注入。 See Dry Principles explained