WhyMe HFR ? Nan, connais pas ... | Désolé, mais là c'est moi qui comprends pas ce que tu dis
Je cherche a construire un DataTable à partir d'un objet : je veux que le type des colonnes reflète le type des propriétés de mon objet et je remplis les valeurs avec les valeurs des propriétés par la même occasion.
Voilà ma fct au final
Code :
- private void BuildDataRowFromClass ( object classObject, string tableName, ref DataSet dataSet, int rowIndex )
- {
- Type type ;
- object value ;
- if ( dataSet.Tables.Contains ( tableName ) == false )
- dataSet.Tables.Add ( new DataTable ( tableName ) ) ;
- dataSet.Tables[tableName].Rows.Add ( dataSet.Tables[tableName].NewRow() ) ;
- foreach ( PropertyInfo propertyInfo in classObject.GetType().GetProperties() )
- {
- type = Nullable.GetUnderlyingType ( propertyInfo.PropertyType ) ;
- if ( type == null )
- type = propertyInfo.PropertyType ;
- if ( type.Namespace == "System" )
- {
- value = propertyInfo.GetValue ( classObject, null ) ;
- switch ( type.Name )
- {
- case "DateTime" :
- // On force le DateTime en chaîne pour avoir des valeurs directement exploitables ds le XML
- if ( rowIndex == 0 )
- dataSet.Tables[tableName].Columns.Add ( propertyInfo.Name, typeof ( string ) ) ;
- value = Convert.ToDateTime ( value ).ToString ( "dd/MM/yyyy" ) ;
- break ;
- case "Decimal" :
- // On formate le 0 en 0.00
- if ( rowIndex == 0 )
- dataSet.Tables[tableName].Columns.Add ( propertyInfo.Name, type ) ;
- if ( Convert.ToDecimal ( value ) == 0 )
- value = 0.00m ;
- break ;
- default :
- if ( rowIndex == 0 )
- dataSet.Tables[tableName].Columns.Add ( propertyInfo.Name, type ) ;
- break ;
- }
- if ( value != null )
- dataSet.Tables[tableName].Rows[rowIndex][propertyInfo.Name] = value ;
- }
- }
- }
|
Et l'utilisation
Code :
- dataSet = new DataSet() ;
- // Contract
- BuildDataRowFromClass ( contract, "Contract", ref dataSet ) ;
- // Contact
- BuildDataRowFromClass ( contact, "Contact", ref dataSet ) ;
- AddDataSetRelation ( ref dataSet, "Contract", "Contact", "ID_Contact" ) ;
- // AddressRelation
- BuildDataRowFromClass ( addressList.ToList()[0].addressRelation, "AddressRelation", ref dataSet ) ;
- AddDataSetRelation ( ref dataSet, "Contact", "AddressRelation", "ID_Contact" ) ;
|
C'est plus clair là ? ou c'est pire ? Message édité par WhyMe le 24-07-2008 à 14:55:28 ---------------
FeedBack HFR
|