Files
BeWoPlaner/BeWo/Converter/IListT2DataTableConverter.cs
2016-06-27 01:45:38 +02:00

63 lines
1.9 KiB
C#

using System;
using System.Collections;
using System.Data;
using System.Globalization;
using System.Windows.Data;
namespace BeWo.Converter
{
public class IListT2DataTableConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is IList && value.GetType().IsGenericType)
{
DataTable lResult = new DataTable();
Type lGenericType = value.GetType().GetGenericArguments()[0];
lResult.TableName = lGenericType.FullName;
lResult.Columns.Add("item");
foreach (var iProp in lGenericType.GetProperties())
{
lResult.Columns.Add(iProp.Name);
}
Hashtable lRows2Objects = new Hashtable();
foreach (var iItem in value as IList)
{
var iRow = lResult.NewRow();
iRow["item"] = iItem;
lRows2Objects.Add(iRow, iItem);
foreach (var iProp in lGenericType.GetProperties())
{
iRow[iProp.Name] = iProp.GetValue(iItem, null);
}
lResult.Rows.Add(iRow);
}
lResult.RowChanged += (s, e) =>
{
foreach (var iProp in lGenericType.GetProperties())
{
iProp.SetValue(lRows2Objects[e.Row], e.Row[iProp.Name], null);
}
};
return lResult;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}