63 lines
1.9 KiB
C#
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();
|
|
}
|
|
}
|
|
} |