今天在开发一个同步功能的时候,用到了Hashtable(哈希表)和 IEnumerator 接口,现在记录下来,以便以后学习!
- using System;
- using System.Collections;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Web;
- using System.Web.SessionState;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.HtmlControls;
- using System.Data.OracleClient;
- namespace Station.StationDataBase.StStation
- {
- /// <summary>
- /// SynchroStationData 的摘要说明。
- /// </summary>
- public class SynchroStationData : BaseSet.BasePape
- {
- protected System.Web.UI.WebControls.CheckBoxList chkStation;
- protected System.Web.UI.WebControls.Label lblMessage;
- protected System.Web.UI.WebControls.ImageButton btnSave;
- ArrayList arrList = new ArrayList(); // 记录已经同步过的数据
- private void Page_Load(object sender, System.EventArgs e)
- {
- // 在此处放置用户代码以初始化页面
- if(!Page.IsPostBack)
- {
- GetSynchroStationInfo();
- // 提示信息
- lblMessage.Text = "颜色说明:灰色-变电站已经同步完毕;黑色-变电站需要同步!";
- }
- }
- #region Web 窗体设计器生成的代码
- override protected void OnInit(EventArgs e)
- {
- //
- // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
- //
- InitializeComponent();
- base.OnInit(e);
- }
- /// <summary>
- /// 设计器支持所需的方法 - 不要使用代码编辑器修改
- /// 此方法的内容。
- /// </summary>
- private void InitializeComponent()
- {
- this.btnSave.Click += new System.Web.UI.ImageClickEventHandler(this.btnSave_Click);
- this.Load += new System.EventHandler(this.Page_Load);
- }
- #endregion
- /// <summary>
- /// 得到将要同步的变电站信息
- /// </summary>
- private void GetSynchroStationInfo()
- {
- BenzClass.Organ objOrgan = new BenzClass.Organ();
- BaseSet.SessionValule objGetSession = new Station.BaseSet.SessionValule();
- Components.StStation objGetStation = new Components.StStation();
- DataSet dsBenz = new DataSet();
- DataSet dsStation = new DataSet();
- DataView dv;
- ListItem objItem;
- int intCompanyID;
- string strStationID;
- string strStationName;
- try
- {
- // 公司ID
- intCompanyID = objGetSession.GetCompanyIDBySession();
- // 得到Benz中数据
- objOrgan.ConnString = DBAccess.DBUtil.GetBasicConnectionString();
- dsBenz = objOrgan.OrganShowByOrganBureauID(intCompanyID);
- dv = dsBenz.Tables[0].DefaultView;
- dv.RowFilter = "f_OrganFlag in (16,64)"; // 16,64表示变电站和其他分类
- // 得到变电站中数据
- dsStation = objGetStation.StationShow(intCompanyID);
- // 将Benz中数据放入哈希表中
- Hashtable myList = new Hashtable();
- for(int i = 0; i < dv.Count; i++)
- {
- myList.Add(dv[i]["f_OrganName"].ToString(),dv[i]["f_OrganID"].ToString());
- }
- // 将数据绑定到CheckBox上
- for(IDictionaryEnumerator ie = myList.GetEnumerator(); ie.MoveNext();)
- {
- objItem = new ListItem();
- objItem.Value = ie.Value.ToString();
- objItem.Text = ie.Key.ToString();
- for(int j = 0; j < dsStation.Tables[0].Rows.Count; j++)
- {
- strStationName = dsStation.Tables[0].Rows[j]["f_stationname"].ToString();
- strStationID = dsStation.Tables[0].Rows[j]["f_stationid"].ToString();
- if(strStationName.CompareTo(ie.Key.ToString()) == 0
- && strStationID.CompareTo(ie.Value.ToString()) == 0)
- {
- objItem.Text = "<font color=/"gray/">" + ie.Key.ToString() + "</font>";
- // 记录已经同步过的数据
- arrList.Add(ie.Value.ToString());
- }
- }
- chkStation.Items.Add(objItem);
- objItem = null;
- }
- }
- catch(System.Exception err)
- {
- string strError = err.Message.ToString().Trim();
- strError = PowerBase.GetOracleCustomErrorInfo(strError);
- PowerBase.ShowMessage(Response,strError);
- }
- }
- /// <summary>
- /// 变电站数据同步
- /// </summary>
- private void SynchroData()
- {
- BaseSet.SessionValule objGetSession = new BaseSet.SessionValule();
- Components.StStation objStation = new Components.StStation();
- int intCompanyID;
- int intStationID;
- string strStationName;
- bool blnFlag = false;
- OracleConnection oraConn = new OracleConnection();
- OracleTransaction oraTran = null;
- try
- {
- oraConn.ConnectionString = DBAccess.DBUtil.GetConnectionString();
- oraConn.Open();
- oraTran = oraConn.BeginTransaction(IsolationLevel.ReadCommitted);
- // 公司ID
- intCompanyID = objGetSession.GetCompanyIDBySession();
- for(int i = 0; i < chkStation.Items.Count; i++)
- {
- // 判断是否选中
- if(chkStation.Items[i].Selected)
- {
- intStationID = System.Convert.ToInt32(chkStation.Items[i].Value.ToString());
- strStationName = chkStation.Items[i].Text.ToString();
- // 判断是否数据已经同步过
- for(IEnumerator ie = arrList.GetEnumerator();ie.MoveNext();)
- {
- if(ie.Current.ToString().CompareTo(intStationID.ToString()) == 0)
- {
- blnFlag = true;
- break;
- }
- }
- // 数据同步
- if(!blnFlag)
- {
- objStation.CompanyID = intCompanyID;
- objStation.StationID = intStationID;
- objStation.StationName = strStationName;
- objStation.StationAdd(oraConn,oraTran);
- }
- }
- }
- //提交事务
- oraTran.Commit();
- PowerBase.ShowMessage(Response,"同步成功!");
- }
- catch(System.Exception err)
- {
- if (oraTran != null)
- {
- oraTran.Rollback();
- oraTran = null;
- }
- string strError = err.Message.ToString().Trim();
- strError = PowerBase.GetOracleCustomErrorInfo(strError);
- PowerBase.ShowMessage(Response,strError);
- }
- }
- /// <summary>
- /// 保存事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void btnSave_Click(object sender, System.Web.UI.ImageClickEventArgs e)
- {
- // 同步数据
- SynchroData();
- }
- }
- }