@@ -75,37 +75,16 @@ public DataTableDynamicContext(DataTable table, Action<DataTableDynamicContext,
7575 {
7676 DataTable = table ;
7777 AddAttributesCallback = addAttributesCallback ;
78+ OnValueChanged = OnCellValueChanged ;
7879
7980 // 获得 DataTable 列信息转换为 ITableColumn 集合
8081 var cols = InternalGetColumns ( ) ;
8182
82- // Emit 生成动态类
83- DynamicObjectType = CreateType ( ) ;
83+ // 生成动态类型 DataTableDynamicObjectType 继承 DataTableDynamicObject 并添加属性
84+ DynamicObjectType = EmitHelper . CreateTypeByName ( $ "BootstrapBlazor_ { nameof ( DataTableDynamicContext ) } _ { GetHashCode ( ) } " , cols , typeof ( DataTableDynamicObject ) , OnColumnCreating ) ;
8485
8586 // 获得显示列
8687 Columns = Utility . GetTableColumns ( DynamicObjectType , cols ) . Where ( col => GetShownColumns ( col , invisibleColumns , shownColumns , hiddenColumns ) ) ;
87-
88- OnValueChanged = OnCellValueChanged ;
89-
90- [ ExcludeFromCodeCoverage ]
91- Type CreateType ( )
92- {
93- // Emit 生成动态类 (使用缓存)
94- var columnNames = string . Join ( '|' , table . Columns . Cast < DataColumn > ( ) . Select ( static c => $ "{ c . ColumnName } :{ c . DataType . FullName } ") ) ;
95- var cacheKey = $ "BootstrapBlazor-{ nameof ( DataTableDynamicContext ) } -{ columnNames } ";
96- var dynamicType = CacheManager . GetDynamicObjectTypeByName ( cacheKey , cols , OnColumnCreating , out var cached ) ;
97-
98- // 缓存命中时仍需调用回调以处理列属性
99- if ( cached && AddAttributesCallback != null )
100- {
101- foreach ( var col in cols )
102- {
103- AddAttributesCallback ? . Invoke ( this , col ) ;
104- }
105- }
106-
107- return dynamicType ?? throw new InvalidOperationException ( ) ;
108- }
10988 }
11089
11190 private static bool GetShownColumns ( ITableColumn col , IEnumerable < string > ? invisibleColumns , IEnumerable < string > ? shownColumns , IEnumerable < string > ? hiddenColumns )
0 commit comments