程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> C#利用反射簡化給類字段賦值

C#利用反射簡化給類字段賦值

編輯:關於ASP.NET

     這個例子主要的思路是建立一個類和數據庫查詢語句的字段結構是一致的

    然後利用反射,直接用數據字段名稱進行拼湊,給類對象的字段進行賦值

    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

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved