PropertyInfo 简单用法
- 一般用于两个类的数据绑定
- 如下
String DefaultDBConnection = "Data Source=111.111.0.111;Initial Catalog=ZMT;User ID=name;Password=pwd";//连接字符串 DataSet ds = new DataSet(); using (SqlConnection conn = new SqlConnection(DefaultDBConnection))//开启数据库连接 { SqlTransaction trans = null; string orgCode = "1=1"; string SQL = string.Format(@"select * from instockplan where ISPID=559 select * from InStockPlanDetails where ISPID=559 and @test"); conn.Open(); trans = conn.BeginTransaction();//打开一个事物 SqlCommand cmd = new SqlCommand(SQL, conn); cmd.Parameters.AddWithValue("@test", orgCode); cmd.Transaction = trans;//此次操作绑定当前的事物 SqlDataAdapter Da = new SqlDataAdapter(cmd); Da.Fill(ds);//把查询的数据存在ds //var i = 0; //foreach (var item in ds.Tables[0].Rows) //{ // Console.WriteLine(i++); //} trans.Commit();//事物提交 conn.Close();//关闭数据库连接 } List<Plan> list = new List<Plan>(); foreach (DataRow item in ds.Tables[0].Rows) { Plan plan = new Plan(); Type planAttr = typeof(Plan); //获取当前类属性 System.Reflection.PropertyInfo[] planAttrs = planAttr.GetProperties();//获取当前这个类的所有属性 foreach (PropertyInfo attr in planAttrs) { if (ds.Tables[0].Columns.Contains(attr.Name)) attr.SetValue(plan, item[attr.Name].ToString(), null);//给当前plan对象赋值该字段 if (attr.Name == "planDetails"&& ds.Tables[1].Rows.Count>0)//如果子类里边有数据的时候才进去 { foreach (DataRow Pitem in ds.Tables[1].Rows) { PlanDetails planD = new PlanDetails(); Type planDAttr = typeof(PlanDetails); System.Reflection.PropertyInfo[] planDAttrs = planDAttr.GetProperties(); foreach (var attrD in planDAttrs) { if (ds.Tables[1].Columns.Contains(attrD.Name)) attrD.SetValue(planD, Pitem[attrD.Name].ToString(), null); } plan.planDetails.Add(planD); } } } list.Add(plan); } foreach (var item in list) { Console.WriteLine(item.ISPID); }
- 测试类
public class Plan { public Plan() { planDetails = new List<PlanDetails>(); } public string ISPCode { get; set; } public string ISPStatus { get; set; } public string ISPID { get; set; } public List<PlanDetails> planDetails { get; set; } } public class PlanDetails { public string ISPDID { get; set; } public string ISPID { get; set; } public string SKUNo { get; set; } }
。net工程师