这些天在工作中遇到了动态绑定数据列的问题;于是用到了反射机制来实现这些功能;例如:
chitemlst[i].lcWorkLinkDtos.Sort(delegate(CodeDto v1, CodeDto v2) { return Comparer<string>.Default.Compare(v1.code, v2.code); }); 对集合中的某个字段进行排序的方法;使用集合的Sort()方法来声明个委托来进行比较;例如上面的例子,对集合中CodeDto类的code字段来进行排序; foreach (PropertyInfo info in dtoV.GetType().GetProperties()) { if (info.Name == dtoF.chkItemValue) { info.SetValue(dtoV, response.responseObjects[i].chkItemValue_cnName, null); string name = string.Empty; name = info.Name.Remove(0, 12); dtoV.GetType().GetProperty("chkItemId" + name).SetValue(dtoV, response.responseObjects[i].id, null); dtoV.GetType().GetProperty("chkItemName" + name).SetValue(dtoV, response.responseObjects[i].itemName, null); dtoV.GetType().GetProperty("chkItemCode" + name).SetValue(dtoV, response.responseObjects[i].itemCode, null); break; } } 利用反射机制来实现对字段的动态加载;dtoV.GetType().GetProperties() 用来获取PropertyInfo集合中的属性; dtoV.GetType().GetProperty("chkItemId" + name).SetValue(dtoV, response.responseObjects[i].id, null);通过反射来给对应的字段赋值;
一下两个例子说明通过反射机制动态获取和设置动态字段:
/通过反射机制动态为属性赋值;dtoV为对应的实体;response.responseObjects[i].id为动态
属性赋值对应的值来源; string chItemid=dtoV.GetType().GetProperty("chkItemId" + name).SetValue(dtoV,
response.responseObjects[i].id, null); //通过反射机制获取动态属性对应的值;dto.dtoDetails[i]为对应的实体;"chkItemName" +
name为实体中的动态字段; string name=(string)dto.dtoDetails[i].GetType().GetProperty("chkItemName" +
name).GetValue(dto.dtoDetails[i], null);