写了一个方法:用实体类obEntity的属性值赋给DataRow相同名字的行字段,但是出错,知道错出在哪里,但是不知道怎么改过来(刚开始学反射),哪位帮忙看看,改一改,深更半夜继续等...
不甚感激,临表涕零~~~~        public static DataRow fillDataRowWithEntity(DataRow dr, Object obEntity)
        {
            DataTable dt = dr.Table;
            Type tpEntity = obEntity.GetType();
            System.Reflection.PropertyInfo[] pis = tpEntity.GetProperties();
            foreach (DataColumn dc in dt.Columns)
            {
                foreach (System.Reflection.PropertyInfo pi in pis)
                {
                    if (dc.ColumnName == pi.Name && (dc.DataType.Name == pi.PropertyType.Name))
                    {
                        dr[dc.ColumnName] = pi.GetValue(tpEntity, null);  //该行出错,提示
                    }
                }
            }
            return dr;
        }

解决方案 »

  1.   

    看了一下GetType()的定义如下        //
            // 摘要:
            //     用索引化属性 (Property) 的可选索引值返回该属性 (Property) 的值。
            // 参数:
            //   obj: 将返回其属性值的对象。
             //
            //   index:索引化属性的可选索引值。对于非索引化属性 (Property),此值应为null。
             //
            // 返回结果:obj 参数的属性 (Property) 值。
             [DebuggerStepThrough]
            [DebuggerHidden]        public virtual object GetValue(object obj, object[] index);
    那么obj应该是属性pi对应的对象tpEntity啊,为什么会提示:对象与目标类型不匹配呢?
      

  2.   

    是不是DataRow里字段类型和属性的数据类型不一致啊
      

  3.   

    是不是DataRow里字段类型和属性的数据类型不一致啊--------------------
    你看我加的条件: if (dc.ColumnName == pi.Name && (dc.DataType.Name == pi.PropertyType.Name)) 类型已经是一样才会执行到里面去.
    我debug调试的时候,监视 "pi.GetValue(tpEntity, null)"时就已经抛了异常了
      

  4.   

    pi.GetValue(obEntity, null)
    应该是这样的 刚才没注意看
      

  5.   

    pi.GetValue(obEntity, null) 
    这里得到的是什么啊?
     dr[dc.ColumnName] 能是一样的类型吗?
    好好设置断点调试一下