Revision: 27808
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at June 24, 2010 05:04 by s0lidmetal
Initial Code
<System.Runtime.CompilerServices.Extension()> _
Public Sub AssignObjectValue(ByVal dr As DataRow, ByVal target As Object)
For Each dc As DataColumn In dr.Table.Columns
Dim colName As String = dc.ColumnName
Dim colValue As Object = dr(colName)
If colValue Is DBNull.Value Then
colValue = Nothing
End If
Dim pi As PropertyInfo = target.GetType().GetProperty(colName)
If pi IsNot Nothing AndAlso colValue IsNot Nothing Then
Dim propType As Type = Nothing
Dim nullableType As Type = Nullable.GetUnderlyingType(pi.PropertyType)
If nullableType IsNot Nothing Then
propType = nullableType
Else
propType = pi.PropertyType
End If
If propType Is colValue.GetType() Then
pi.SetValue(target, colValue, Nothing)
End If
End If
Next
End Sub
Initial URL
Initial Description
This will populate object properties with values from a DataRow. The DataTable column names must match the property names and types of the target class.
Example:
DataTable dt = new DataTable();
dt.Columns.Add("TestString", typeof(string));
dt.Columns.Add("TestBool", typeof(bool));
dt.Columns.Add("TestInt", typeof(int));
dt.Columns.Add("TestDouble", typeof(double));
dt.Columns.Add("TestDecimal", typeof(decimal));
dt.Columns.Add("TestFloat", typeof(string));
DataRow dr = dt.NewRow();
dr["TestString"] = "Hello";
dr["TestBool"] = false;
dr["TestInt"] = DBNull.Value;
dr["TestDouble"] =4.56;
dr["TestDecimal"] = 7.89m;
dr["TestFloat"] = "3.14f";
dt.Rows.Add(dr);
TestClass tc = new TestClass();
dr.AssignObjectValue(tc);
class TestClass
{
public string TestString { get; set; }
public bool? TestBool { get; set; }
public int? TestInt { get; set; }
public double TestDouble { get; set; }
public decimal TestDecimal { get; set; }
public float TestFloat { get; set; }
}
Initial Title
Reflection extension method to bind DataRow values to object properties.
Initial Tags
Initial Language
Visual Basic