void ResetList()
{
if (!is_initialized)
{
return;
}
IList l;
object source = ListBindingHelper.GetList(datasource, datamember);
//
// If original source is null, then create a new object list
// Otherwise, try to infer the list item type
//
if (datasource == null)
{
l = new BindingList <object>();
//list_defaulted = true;
}
else if (source == null)
{
//Infer type based on datasource and datamember,
// where datasource is an empty IEnumerable
// and need to find out the datamember type
Type property_type = ListBindingHelper.GetListItemProperties(datasource) [datamember].PropertyType;
Type t = typeof(BindingList <>).MakeGenericType(new Type [] { property_type });
l = (IList)Activator.CreateInstance(t);
}
else if (source is IList)
{
l = (IList)source;
}
else if (source is IEnumerable)
{
IList new_list = GetListFromEnumerable((IEnumerable)source);
l = new_list == null ? list : new_list;
}
else if (source is Type)
{
Type t = typeof(BindingList <>).MakeGenericType(new Type [] { (Type)source });
l = (IList)Activator.CreateInstance(t);
}
else
{
Type t = typeof(BindingList <>).MakeGenericType(new Type[] { source.GetType() });
l = (IList)Activator.CreateInstance(t);
l.Add(source);
}
SetList(l);
}