⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmdepttree.cs

📁 功能设计:平台管理、收费点维护、收费项目管理、缴费管理
💻 CS
字号:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.OracleClient;
using GlobleUtility;


namespace Charge
{
	/// <summary>
	/// CfrmDeptTree 的摘要说明。
	/// </summary>
	public class CfrmDeptTree : System.Windows.Forms.Form
	{
		private System.Windows.Forms.Button btnDeptCancel;
		private System.Windows.Forms.Button btnDeptOK;
		private System.Windows.Forms.TreeView trvDept;
		private System.Windows.Forms.ImageList imgDeptList;
		private System.ComponentModel.IContainer components;
		private TextBox DeptName;
		private int nDeptClass; //显示类型, 1为学生部门类型显示,2为教工部门类型显示, 3表示所有部门类型显示,4表示学生部门及班级显示 
		private int nSelected;  //选择无用的类型 0 选择最高节点无用,1 选择最高节点部门节点无用 9 没有无用节点
        //构造函数,OwnerDeptName为传入的文本框引用,DeptClass为部门类型参数,Selected为部门级别参数
		public CfrmDeptTree(TextBox OwnerDeptName,int DeptClass,int Selected)
		{
			//
			// Windows 窗体设计器支持所必需的
			//
			InitializeComponent();
            DeptName = OwnerDeptName;
			nDeptClass = DeptClass;
			nSelected = Selected;
			//
			// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
			//
		}

		/// <summary>
		/// 清理所有正在使用的资源。
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows 窗体设计器生成的代码
		/// <summary>
		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
		/// 此方法的内容。
		/// </summary>
		private void InitializeComponent()
		{
			this.components = new System.ComponentModel.Container();
			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(CfrmDeptTree));
			this.btnDeptCancel = new System.Windows.Forms.Button();
			this.btnDeptOK = new System.Windows.Forms.Button();
			this.trvDept = new System.Windows.Forms.TreeView();
			this.imgDeptList = new System.Windows.Forms.ImageList(this.components);
			this.SuspendLayout();
			// 
			// btnDeptCancel
			// 
			this.btnDeptCancel.Location = new System.Drawing.Point(136, 280);
			this.btnDeptCancel.Name = "btnDeptCancel";
			this.btnDeptCancel.Size = new System.Drawing.Size(72, 23);
			this.btnDeptCancel.TabIndex = 4;
			this.btnDeptCancel.Text = "取消";
			this.btnDeptCancel.Click += new System.EventHandler(this.btnDeptCancel_Click);
			// 
			// btnDeptOK
			// 
			this.btnDeptOK.Location = new System.Drawing.Point(16, 280);
			this.btnDeptOK.Name = "btnDeptOK";
			this.btnDeptOK.Size = new System.Drawing.Size(72, 23);
			this.btnDeptOK.TabIndex = 3;
			this.btnDeptOK.Text = "确定";
			this.btnDeptOK.Click += new System.EventHandler(this.btnDeptOK_Click);
			// 
			// trvDept
			// 
			this.trvDept.HideSelection = false;
			this.trvDept.ImageList = this.imgDeptList;
			this.trvDept.Location = new System.Drawing.Point(0, 0);
			this.trvDept.Name = "trvDept";
			this.trvDept.Size = new System.Drawing.Size(224, 256);
			this.trvDept.TabIndex = 2;
			this.trvDept.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.trvDept_AfterSelect);
			// 
			// imgDeptList
			// 
			this.imgDeptList.ImageSize = new System.Drawing.Size(16, 16);
			this.imgDeptList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgDeptList.ImageStream")));
			this.imgDeptList.TransparentColor = System.Drawing.Color.Transparent;
			// 
			// CfrmDeptTree
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
			this.ClientSize = new System.Drawing.Size(224, 309);
			this.Controls.Add(this.btnDeptOK);
			this.Controls.Add(this.btnDeptCancel);
			this.Controls.Add(this.trvDept);
			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
			this.MaximizeBox = false;
			this.MinimizeBox = false;
			this.Name = "CfrmDeptTree";
			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
			this.Text = "部门浏览";
			this.Load += new System.EventHandler(this.CfrmDeptTree_Load);
			this.ResumeLayout(false);

		}
		#endregion

		private void CfrmDeptTree_Load(object sender, System.EventArgs e)
		{
			//初始化pnlDept部门显示控件
			//数据库查询操作,listview中按照名称顺序显示记录
			System.Data.OracleClient.OracleConnection Org_myConn = Connection.DBConnection;
			if (Org_myConn == null)
			{
				return;	
			}
			//检查有无学校信息,如无,则窗体关闭
			string Org_mySql = "SELECT OrgName FROM Charge_School_Info";
			OracleCommand selCommand = new OracleCommand(Org_mySql,Org_myConn);
			
			OracleDataReader trvDataReader = null;
			try
			{
			trvDataReader = selCommand.ExecuteReader();
			}
			catch(Exception ee)
			{
				MessageBox.Show("数据库查询出错,消息如下:\r\n"+ee.Message,"消息:",MessageBoxButtons.OK,MessageBoxIcon.Warning);
				return;
			}
			if (!trvDataReader.HasRows)
			{
				MessageBox.Show("在建立部门信息之前必须建立学校信息!");
				this.Close();
			}
			trvTagTemp TagTemp= new trvTagTemp();//为结构trvTagTemp分配内存
			TreeNode rootNode = new TreeNode();
			while (trvDataReader.Read ())
			{
				
				rootNode =trvDept.Nodes.Add(trvDataReader.GetValue(0).ToString().Trim());
				rootNode.ImageIndex = 2;
				rootNode.SelectedImageIndex = 2;
				TagTemp.temp_id = "0";   //在部门部门关系表中将一级部门的上级部门ID设为0
				TagTemp.temp_isexpand = 2; //表示根节点已展开过
                //该值为0代表此节点是最高节点,该值为1代表此节点是部门类型,该值为2代表此节点是班级类型
				TagTemp.temp_type = 0; 
				rootNode.Tag = TagTemp;

			}	
			GetDepttree(rootNode);
			trvDept.CollapseAll(); //折叠所有树节点
		}
		/****************************************************************************
		Function Description:
			获得下属部门列表
		Arguments:
			Type_ID		查找类别	1—查下属有学生的部门
									2—查下属有老师的部门
                                    3—查所有部门
			Node		当前点击的树结点,即当前部门
		Return Value:
			NONE
		
		
		

*****************************************************************************/
		private void GetDepttree(TreeNode Node)//ok
		{
			string strDtName = "dtDept";
			DataSet dsDept = new DataSet();

			//存储过程的名称
			string strProcedureName = "";

			//输出参数(两个)
			OracleParameter[] outParam = {new OracleParameter(), new OracleParameter()};
			outParam[0].ParameterName = "p_Result";
			outParam[0].OracleType = OracleType.Number;
			outParam[0].Direction = ParameterDirection.Output;
			outParam[1].ParameterName = "Re_CURSOR";
			outParam[1].OracleType = OracleType.Cursor;
			outParam[1].Direction = ParameterDirection.Output;

			//输入参数(两个)
			OracleParameter[] inParam = {new OracleParameter(), new	OracleParameter()};			
            //Node.tag里保存的是节点的类别
			//实例化结构trvTagTemp,用来取得选定treenode的tag属性中保存的Deptid
			trvTagTemp selectedTag = (trvTagTemp)Node.Tag ;
			//int nTag = selectedTag.temp_type;
			switch (nDeptClass)
			{
					//显示学生部门类型
				case 1:
					strProcedureName = "SP_charge_GETDEPTBYID";
					inParam[0].ParameterName = "p_DeptID";
					inParam[0].OracleType = OracleType.Int32;
					inParam[0].Value = selectedTag.temp_id;
					inParam[1].ParameterName = "p_Type";
					inParam[1].OracleType = OracleType.Int32;
					inParam[1].Value = 1;
					break;

					//显示教工部门类型
				case 2:
					strProcedureName = "SP_charge_GETDEPTBYID";
					inParam[0].ParameterName = "p_DeptID";
					inParam[0].OracleType = OracleType.Int32;
					inParam[0].Value = selectedTag.temp_id;
					inParam[1].ParameterName = "p_Type";
					inParam[1].OracleType = OracleType.Int32;
					inParam[1].Value = 2;
					break;

					//显示所有部门类型
				case 3:
					strProcedureName = "SP_charge_GETDEPTBYID";
					inParam[0].ParameterName = "p_DeptID";
					inParam[0].OracleType = OracleType.Int32;
					inParam[0].Value = selectedTag.temp_id;
					inParam[1].ParameterName = "p_Type";
					inParam[1].OracleType = OracleType.Int32;
					inParam[1].Value = 3;
					break;
				case 4:
					strProcedureName = "SP_charge_GETDEPTBYID";
					inParam[0].ParameterName = "p_DeptID";
					inParam[0].OracleType = OracleType.Int32;
					inParam[0].Value = selectedTag.temp_id;
					inParam[1].ParameterName = "p_Type";
					inParam[1].OracleType = OracleType.Int32;
					inParam[1].Value = 1;
					break;
				default:
					break;
			}

			//存储过程的调用,更新dtDept,dsDept
			
			GlobleHelper.ExecStoredProc(strProcedureName, inParam, ref outParam, ref dsDept);
			if (Convert.ToInt32(outParam[0].Value) == 0)
			{
				trvTagTemp TagTemp= new trvTagTemp();//为结构trvTagTemp分配内存
			
				foreach(DataTable dtTable in dsDept.Tables)
				{
					dtTable.TableName = strDtName;
									

					TreeNode NewNode;

					if (dtTable.Rows.Count > 0)
					{						

	
						foreach (DataRow myRow in dtTable.Rows)
						{
							//在treeview中显示数据
							NewNode = new TreeNode(Node.Index.ToString() + myRow[0].ToString());//保证node唯一性
							Node.Nodes.Add(NewNode);
							NewNode.Text = myRow["DeptName"].ToString();	//DeptName或ClassName
							TagTemp.temp_id = myRow[0].ToString();   //部门ID
							TagTemp.temp_isexpand = 1; //表示根节点未展开过
							TagTemp.temp_type = 1; //该节点是部门类型
							NewNode.Tag = TagTemp;
							NewNode.ImageIndex = 0;
							NewNode.SelectedImageIndex = 1;
							
						}

					}
					Node.Expand();
					selectedTag.temp_isexpand = 2;
					Node.Tag = selectedTag;				
                }
			}
			else
			{
				MessageBox.Show("未知数据库操作错误,请重新打开窗体!");
			}
			}

		/****************************************************************************
		Function Description:
			获得下属班级列表
		Arguments:
			Node		当前点击的树结点,即当前部门
		Return Value:
			NONE
		History:
			Modified on 07/23/2004 by may-fly@tom.com
		*****************************************************************************/
		private void GetClasstree(TreeNode Node)//ok
		{
			string strDtName = "dtClass";
			DataSet dsClass = new DataSet();
            //实例化结构trvTagTemp,用来取得选定treenode的tag属性中保存的Deptid
			trvTagTemp selectedTag = (trvTagTemp)Node.Tag ;
            //存储过程的名称
			string strProcedureName = "SP_charge_getclass";
			//输出参数(两个)
			OracleParameter[] outParam = {new OracleParameter(), new OracleParameter()};

			outParam[0].ParameterName = "p_Result";
			outParam[0].OracleType = OracleType.Number;
			outParam[0].Direction = ParameterDirection.Output;

			outParam[1].ParameterName = "Re_CURSOR";
			outParam[1].OracleType = OracleType.Cursor;
			outParam[1].Direction = ParameterDirection.Output;

			//输入参数(1个)
			OracleParameter[] inParam = {new OracleParameter()};
			inParam[0].Direction = ParameterDirection.Input;
			inParam[0].ParameterName = "p_DeptID";
			inParam[0].Value = selectedTag.temp_id;

			//调用CStoreProc的RunProcedure方法,更新dtDept,dsClass
			
			GlobleHelper.ExecStoredProc(strProcedureName, inParam, ref outParam, ref dsClass);
		
				if( Convert.ToInt32(outParam[0].Value)==0)
				{
					trvTagTemp TagTemp= new trvTagTemp();//为结构trvTagTemp分配内存
				
					foreach(DataTable dtTable in dsClass.Tables)
					{
						dtTable.TableName = strDtName;						
						TreeNode NewNode;
						if (dtTable.Rows.Count > 0)
						{
							
							foreach (DataRow myRow in dtTable.Rows)
							{
								//在treeview中显示数据
								NewNode = new TreeNode(Node.Index.ToString() + myRow[0].ToString());//保证node唯一性
								Node.Nodes.Add(NewNode);
								NewNode.Text = myRow["ClassName"].ToString();	//ClassName
								TagTemp.temp_id = myRow[0].ToString();   //部门ID
								TagTemp.temp_isexpand = 2; //表示根节点已展开,因为是叶子节点,所以默认展开
								TagTemp.temp_type = 2; //该节点是班级类型
								NewNode.Tag = TagTemp;
								NewNode.ImageIndex = 6;							
							}
						}
						Node.Expand();	
					}
				}
				else
				{
					MessageBox.Show("未知数据库操作错误,请重新打开窗体!");
				}
			
		}


		private void trvDept_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
		{
			//实例化结构trvTagTemp,用来取得选定treenode的tag属性中保存的Deptid
			trvTagTemp selectedTag = (trvTagTemp)e.Node.Tag ;		
           //如果未展开过则处理进行展开
			if (selectedTag.temp_isexpand == 1) //指示是否已展开
			{
				switch (nDeptClass) //指示显示类型
				{
					case 1://学生下部门节点
						e.Node.Nodes.Clear();
						GetDepttree(e.Node);
						break;
					case 2://教工下部门节点
						e.Node.Nodes.Clear();
						GetDepttree(e.Node);			
						break;
					case 3://所有部门节点
						e.Node.Nodes.Clear();
						GetDepttree(e.Node);
						break;
					case 4://学生下部门节点及班级节点
						e.Node.Nodes.Clear();
						GetDepttree(e.Node);
						GetClasstree(e.Node);
						break;
					default:
						break;
				}
			}
			else
			{
				switch (nDeptClass)
				{						
					case 1:
						//获得该部门信息
						break;
					case 2://获得该部门信息
						break;
					case 3:
						//获得该部门信息
						break;					
					default:
						break;
				}
			}
		}

		private void btnDeptOK_Click(object sender, System.EventArgs e)
		{ 
			trvTagTemp selectedTag = (trvTagTemp)trvDept.SelectedNode.Tag ;
			switch (nSelected)
			{
				case 0:
					if (selectedTag.temp_type == 0) //选择最高节点无效
					{
						return;
					}
					break;
				case 1:
					if (selectedTag.temp_type == 0) //选择最高节点无效
					{
						return;
					}
					if (selectedTag.temp_type == 1) //选择部门节点无效
					{
						return;
					}
					break;
				default:
					break;
			}
			DeptName.Tag = selectedTag.temp_id;
			DeptName.Text = trvDept.SelectedNode.Text;			
			this.Close();

		
		}

		private void btnDeptCancel_Click(object sender, System.EventArgs e)
		{
			this.Close();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -