JS gevorderde |
|
Hey,
Het probleem is dat ik me code niet online mag publiceren (wat trouwens ook teveel is).
Die code die jij hierboven hebt is dus de 'oude' manier, zoals in da artikel staat aangegeven. Als ik deze manier gebruik werkt het wel.
Maar mijn bedoeling is dus nu de 'nieuwe' manier te gebruiken met dit idee:
oEmployee = new Sample.Employee();
object[,] oFields = oEmployee.GetFields(typeof(Sample.Employee));
foreach(DataRow oRow in oTable.Rows)
{
oEmployee = new Sample.Employee();
oEmployee.SetFields(oFields,oRow);
// deze oEmployee ergens opslaan, geen probleem;
}
oEmployee = new Sample. Employee(); object[, ] oFields = oEmployee. GetFields(typeof(Sample. Employee)); foreach(DataRow oRow in oTable.Rows) { oEmployee = new Sample. Employee(); oEmployee.SetFields(oFields,oRow); // deze oEmployee ergens opslaan, geen probleem; }
Het probleem zit hem bij mij nu in wanneer ik een andere datatype moet converteren. In het artikel bedoel ik dan bijv. de code:
[ColumnAttributes("EmployeeID")]
public int EmployeeID;
[ColumnAttributes("EmployeeID")] public int EmployeeID;
of
[ColumnAttributes("BirthDate")]
public DateTime BirthDate;
[ColumnAttributes("BirthDate")] public DateTime BirthDate;
Zodra ik ook bij die SetValue functie kom, geeft hij ook aan:
Citaat: Een object van type System.String kan niet naar het type System.DateTime worden geconverteerd.
------- EDIT -------
Oke, ik heb het gedeeltelijk opgelost door gebruik te maken van Convert.ChangeType():
oField.SetValue(this, Convert.ChangeType( oRow[oColumnAttributeName.ColumnName],oField.FieldType));
oField.SetValue(this, Convert.ChangeType( oRow[oColumnAttributeName.ColumnName],oField.FieldType));
Enige probleem waar ik nu weer tegenaan hik, is als het type een gedefineerde enum is.
Iemand die hiervoor de oplossing heeft?
----------- EDIT 2 --------------
Oke, ik heb het nu zo opgelost:
try {
oField.SetValue(this, Convert.ChangeType(oRow[oColumnAttributeName.ColumnName], oField.FieldType));
}
catch (Exception e) {
try {
int ii = Convert.ToInt32(oRow[oColumnAttributeName.ColumnName]);
object oo = Enum.ToObject(oField.FieldType, ii);
oField.SetValue(this, oo);
}
catch (Exception ee) { }
}
try { oField.SetValue(this, Convert.ChangeType(oRow[oColumnAttributeName.ColumnName], oField.FieldType)); } catch (Exception e) { try { int ii = Convert.ToInt32(oRow[oColumnAttributeName.ColumnName]); object oo = Enum.ToObject(oField.FieldType, ii); oField.SetValue(this, oo); } catch (Exception ee) { } }
Iemand die een betere oplossing heeft...
i.i.g. bedankt allemaal. gr J |