这里的类实例拥有的字段类型和数量大于等于DataTable中的列,类实例的字段对应DataTable中的一列,类实例还可以有自定义的字段,不包含在DataTable列中:
源代码如下:
///
/// 编辑DataTable的一行数据
///
/// 要编辑的DataTable
/// 编辑的实体类
/// 要编辑的行
///
public static bool editDataRow(ref DataTable dataTable, Object obj, int index)
{
bool isOk = false;
try
{
DataColumnCollection dtcolColl = dataTable.Columns; //数据结果集列总数
//数据为空
if (dataTable.Rows.Count == 0)
{
return isOk;
}
DataRow dataRow = dataTable.Rows[index]; //修改的数据行
//列为空
if (dtcolColl.Count == 0)
{
return isOk;
}
Type type = obj.GetType(); //建立反射
for (int i = 0; i < dtcolColl.Count; i++)
{
String colName = dtcolColl[i].ColumnName; //取出列表的表头名称
PropertyInfo pInfo = type.GetProperty(colName); //反射机制,动态检索类属性
if (pInfo != null) //如果在类中找到对应的属性值,则将其值取出来
{
Object objPro = pInfo.GetValue(obj, null); //读取obj某列的值
//如果属性值为空
if ((objPro != null) && (!Convert.IsDBNull(objPro) && objPro.ToString() != null)) //如果数据集中此列有值
{
dataRow[colName] = objPro;
}
}
}
isOk = true;
}
catch (Exception ex)
{ //不捕获异常,异常抛出由开发人员处理
isOk = false;
}
return isOk;
}