我编写了一个扩展方法,将Datatable转换为如下所示的通用可观察集合:
public static ObservableCollection<T> ToObservableCollection<T>(this DataTable dt)
{
var columnNames = dt.Columns.Cast<DataColumn>()
.Select(c => c.ColumnName.ToUpperInvariant())
.ToList();
var properties = typeof(T).GetProperties();
List<T> returnList = dt.AsEnumerable().Select(row =>
{
var objT = Activator.CreateInstance<T>();
foreach (var pro in properties)
{
if (columnNames.Contains(pro.Name.ToUpperInvariant()))
{
if (row[pro.Name] != DBNull.Value && Convert.ToString(row[pro.Name]) != string.Empty)
{
if ((pro.PropertyType == Type.GetType("System.Boolean")) || (row[pro.Name].GetType() == Type.GetType("System.Boolean")))
pro.SetValue(objT, Convert.ToBoolean(row[pro.Name]), null);
else if (row[pro.Name].GetType() == Type.GetType("System.Int64"))
pro.SetValue(objT, Convert.ToInt32(row[pro.Name]), null);
else
pro.SetValue(objT, row[pro.Name], System.Reflection.BindingFlags.Default, null, null, CultureInfo.CurrentUICulture);
}
}
}
return objT;
}).ToList();
我在我的机器(image)中将小数符号设置为Comma(,),而我的应用程序的CurrentCulture中的数字格式具有相同的值(image)。
从数据库返回的数据表也具有十进制值,其中十进制分隔符是逗号(,)see image
当我使用上述方法将此数据表转换为可观察集合时,我得到了具有十进制值的可观察集合,但没有小数点分隔符逗号(,),而是将period(。)作为小数点分隔符。
我在这里想念什么?
如果我的问题不清楚,请告诉我。我将相应地添加更多详细信息。
我尝试使用示例WPF应用程序重现此行为,当我在属性上执行ToString()并将其显示在标签中时,我将逗号(,)作为小数点分隔符。如果我不执行ToString(),则将period(。)用作小数点分隔符(image)
尝试了Rick Strahl's Web Log中提供的解决方案,但也没有帮助。