这里的类实例拥有的字段类型和数量大于等于DataTable中的列,类实例的字段对应DataTable中的一列,类实例还可以有自定义的字段,不包含在DataTable列中:
源代码如下:
///
/// 为DATATABLE增加一行数据
/// 编辑的实体类
/// 要编辑的DataTable
///
添加失败返回-1,否则返回添加后的总行数
///
public static int addDataRow(ref DataTable dataTable, Object obj)
{
int backI = -1; //默认值
try
{
//数据为空
if (dataTable.Rows.Count == 0)
{
return backI;
}
DataColumnCollection dtcolColl = dataTable.Columns; //数据结果集列总数
//列为空
if (dtcolColl.Count == 0)
{
return backI;
}
Type type = obj.GetType(); //建立反射
DataRow dataRow = dataTable.NewRow(); //新建数据行
//循环所有列
for (int i = 0; i < dtcolColl.Count; i++)
{
String colName = dtcolColl[i].ColumnName; //取出列表的表头名称
PropertyInfo pInfo = type.GetProperty(colName); //反射机制,动态检索类属性 读取obj某字段的值
if (pInfo != null) //如果在类中找到对应的属性值,则将其值取出来
{
Object objPro = pInfo.GetValue(obj, null);
//如果属性值为空
if ((objPro != null) && (!Convert.IsDBNull(objPro) && objPro.ToString() != null)) //如果数据集中此列有值
{
dataRow[colName] = objPro;
}
}
}
dataTable.Rows.Add(dataRow);
backI = dataTable.Rows.Count;
}
catch (Exception ex)
{
backI = -1;
throw ex;
}
return backI;
}