展会信息港展会大全

C#利用反射简化给类字段赋值
来源:互联网   发布日期:2016-01-27 15:28:39   浏览:1521次  

导读:这个例子主要的思路是建立一个类和数据库查询语句的字段结构是一致的然后利用反射,直接用数据字段名称进行拼凑,给类对象的字段进行赋值1 类的定义namespace CCB_Donet ClassFolder{public class FieldRuleI ...

这个例子主要的思路是建立一个类和数据库查询语句的字段结构是一致的

然后利用反射,直接用数据字段名称进行拼凑,给类对象的字段进行赋值

1.类的定义

namespace CCB_Donet.ClassFolder

{

public class FieldRuleInfo

{

public string gStrFNo;

public string gStrFName;

public string gStrFLock;

public string gStrFCaption;

public string gStrFType;

public string gStrFMust;

public string gStrFMin;

public string gStrFMax;

public string gStrFDefault;

public string gStrFDate;

public string gStrFDB;

public string gStrFAllow;

public string gStrFDisallow;

public string gStrFSB;

public string gStrFBig;

public string gStrFSmall;

public string gStrFInputMethod;

public string gStrFCHK;

public string gStrFRelation;

public string gStrFDesc;

public string gStrFSecond;

public string gStrFQC;

public string gStrFException;

public string gStrFASupp;

public string gStrFYQH;

public string gStrFPos;

public string gStrFStar;

public string gStrFSave;

public string gStrFAddress;

public string gStrFLblColor;

public string gStrFIsCheckList;

}

}

#region 加载字段规则

private bool m_GetRule()

{

string strSQL = "";

DataTable dtGet = null;

#if(DEBUG)

try

{

#endif

if (Common.gIntTypeOrder == 95)

{

strSQL = "select A.FNo,A.FName,A.FLock,A.FCaption,A.FType," +

"A.FMust,A.FMin,A.FMax,A.FDefault,A.FDate,rn" +

"A.FDB,A.FAllow,A.FDisallow,A.FSB,A.FBig,A.FSmall,A.FInputMethod," +

"A.FCHK,A.FRelation,A.FDesc,A.FSecond,rn" +

"A.FQC,A.FException,A.FASupp,A.FYQH,A.FPos,A.FStar,A.FSave,"+

"A.FAddress,A.FLblColor,A.FIsCheckList from P_Field_Rule95 A rn" +

"INNER JOIN P_Field_Initial B ON A.FNo=B.FNo rn" +

"where A.FormType=1 AND B.FSection='1' AND " +

"(B.FRegion95=1 OR B.FRegion95=-1) ORDER BY A.FOrder";

}

else

{

strSQL = "select A.FNo,A.FName,A.FLock,A.FCaption,A.FType,"+

"A.FMust,A.FMin,A.FMax,A.FDefault,A.FDate,rn" +

"A.FDB,A.FAllow,A.FDisallow,A.FSB,A.FBig,A.FSmall,"+

"A.FInputMethod,A.FCHK,A.FRelation,A.FDesc,A.FSecond,rn" +

"A.FQC,A.FException,A.FASupp,A.FYQH,A.FPos,A.FStar,"+

"A.FSave,A.FAddress,A.FLblColor,A.FIsCheckList "+

"from P_Field_Rule A rn" +

"INNER JOIN P_Field_Initial B ON A.FNo=B.FNo rn" +

"where A.FormType=" + Common.gIntFormType.ToString() +

" AND B.FSection='1' AND (B.FRegion=" + Common.gIntRegion.ToString() +

" OR B.FRegion=-1) ORDER BY A.FOrder";

}

dtGet = DB.GetDataTableBySQL(strSQL);

if (dtGet.Rows.Count <= 0)

{

Common.ShowMessage("字段规则表没有数据,请马上联系软件工程师!", MessageBoxIcon.Error);

return false;

}

//获得类信息,为下面的反射调用做准备

Type oType = Type.GetType("CCB_Donet.ClassFolder.FieldRuleInfo");

//生成类对象数组,和数据库记录个数是一致的

mMainFieldRule = new FieldRuleInfo[dtGet.Rows.Count];

for (int i = 0; i < dtGet.Rows.Count; i++)

{

//这里使用反射动态为FieldRuleInfo字段赋值数据

mMainFieldRule[i] = new FieldRuleInfo();

for (int j = 0; j < dtGet.Columns.Count; j++)

{

//这里直接获取类的字段名称,然后把数据库里对应字段的值赋值给它

FieldInfo fieldInfo = oType.GetField("gStr" + dtGet.Columns[j].ColumnName,

BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance

| BindingFlags.Static);

fieldInfo.SetValue(mMainFieldRule[i], dtGet.Rows[i][j].ToString());

}

}

return true;

#if(DEBUG)

}

catch (Exception ex)

{

return false;

MyLog.WriteErrLog("frmDE-m_GetRule", ex.Message);

}

finally

{

dtGet = null;

}

#endif

}

#endregion

赞助本站

人工智能实验室

相关热词: 反射 字段 赋值 C

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港