我需要通過向控件添加一個DataSource來將此處理程序附加到RadListView列創建。將未知類型的通用方法事件處理程序附加到
public void GenericColumnCreatingHandler<T>(object sender, ListViewColumnCreatingEventArgs e)
{
e.Column.Visible = BaseEntity<int>.MemberVisibility<T>
(e.Column.FieldName, TelerikPropertyVisibilityAttribute.VisibilityTypeEnum.BaseDetails);
e.Column.HeaderText = CaricaTestoLocale(e.Column.HeaderText, "Col_" + e.Column.HeaderText);
e.Column.BestFit();
e.Column.AutoSizeMode = ListViewBestFitColumnMode.AllCells;
}
我的問題是,我需要進行處理,從這個其他泛型方法附:
private void PopulateRecord(TipoTabellaBase tipo)
{
Type generic = typeof(CommonTableService<>);
Type[] typeArgs = { tipo.Tipo };
var constructed = generic.MakeGenericType(typeArgs);
var instance = Activator.CreateInstance(constructed);
if (instance == null)
return;
MethodInfo getEntities = constructed.GetMethod("GetEntitiesWithNoParameters");
//getEntities = getEntities.MakeGenericMethod(typeArgs);
var result = (IEnumerable<BaseEntity<int>>)getEntities.Invoke(instance, null);
lvRecords.ColumnCreating += base.GenericColumnCreatingHandler<BaseEntity<int>>;
lvRecords.DataSource = result;
BestFit(lvRecords);
generic = null;
typeArgs = null;
constructed = null;
getEntities = null;
instance = null;
}
有問題的行是這一個:
lvRecords.ColumnCreating += base.GenericColumnCreatingHandler<BaseEntity<int>>
因爲BaseEntity是EF基地鍵入所有實體,但這不足以滿足BaseEntity.MemberVisibility方法;這個方法需要知道確切的實體類型來設置基於特定自定義屬性的可見屬性(當然還有網格列)。
問題是:我可以調用base.GenericColumnCreatingHandler,其中T是TipoTabellaBase tipo.Tipo(類型)在設計時不知道類型?
任何幫助將不勝感激! 感謝提前。
丹尼爾
「from this other generic method」 - 'PopulateRecord' is * not * a「generic method」(在C#意義上)。 –
是O.R. Mapper,你是對的。但是,我認爲,這還不是真正的問題... –