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

📄 frmplatfclass.cs

📁 Oracle源码:Oracle 数据库管理与应用系统开发代码
💻 CS
📖 第 1 页 / 共 2 页
字号:
			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;
	
			//显示学生部门类型
		
			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;
				

			//存储过程的调用,更新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 GetClassList(TreeNode Node)//ok
		{
			string strDtName = "dtClass"; 
			DataSet dsUser = new DataSet();

			//实例化结构trvTagTemp
			trvTagTemp selectedTag = (trvTagTemp)Node.Tag ;
	
			int DeptID = Convert.ToInt32(selectedTag.temp_id);
			//存储过程的名称
			string strProcedureName = "SP_charge_GetClassByDeptID";

			//输出参数(两个)
			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()};
			inParam[0].Direction = ParameterDirection.Input;
			inParam[0].ParameterName = "p_DeptID";
			inParam[0].Value = DeptID;

			//调用CStoreProc的RunProcedure方法,更新dtDept,dsUser
			
			GlobleHelper.ExecStoredProc(strProcedureName, inParam, ref outParam, ref dsUser);
			if( Convert.ToInt32(outParam[0].Value)==0)
			{			
					foreach(DataTable dtTable in dsUser.Tables)
					{
						dtTable.TableName = strDtName;
						//对ListView进行初始化
						lvClass.ListViewItemSorter=null;
						lvClass.BeginUpdate();//防止闪烁
						lvClass.Items.Clear();
						lvClass.Columns.Clear();
					    string[] UserFieldInfo = {"班级名称","所属部门","班级描述"};
                        for (int i = 0; i <= 2; i++)
						{
							lvClass.Columns.Add(UserFieldInfo[i], 80, HorizontalAlignment.Center);
						}				
						lvClass.Columns[0].Width =150;
						lvClass.Columns[1].Width =150;
						lvClass.Columns[2].Width =200;
						int j = 0;
						foreach (DataRow myRow in dtTable.Rows)
						{
							//在listview中显示数据
							ListViewItem  lvi;								
                            //依次添加每列的数据
							lvi = lvClass.Items.Add(myRow["ClassName"].ToString(), j);
							lvi.SubItems.Add(myRow["DeptName"].ToString());
							lvi.SubItems.Add(myRow["ClassDesc"].ToString());
							lvTagTemp TagTemp= new lvTagTemp();//为结构lvTagTemp分配内存
							TagTemp.temp_id  = myRow["ClassID"].ToString();											
							lvi.Tag = TagTemp;
                            j++;
						}
					
						this.lvClass.ListViewItemSorter = new SortBySubItem(1);
						lvClass.Sort();
						lvClass.EndUpdate();
						lvClass.Refresh();	
					}
			}
			else
			{
					MessageBox.Show("未知数据库操作错误,请重新打开窗体!");
			}
		

		}
	
	

	
		/***************************************************************************************************************
		 * 功能:当对listview中某行双击时,通过此方法弹出新窗体显示该行信息
		 * 
		 * 输入参数:1、sender
		 *           2、e
		 * 输出参数:无
		 * 
		 * 最后修改时间:04-08-12   by cellz
		 * ************************************************************************************************************/
		private void lvClass_DoubleClick(object sender, System.EventArgs e)
		{
			
		}


		/***************************************************************************************************************
		 * 功能:当对toolbar单击时的处理操作,有新增、浏览、删除、查询、退出按钮
		 * 
		 * 输入参数:1、sender
		 *           2、e
		 * 输出参数:无
		 * 
		 * 最后修改时间:04-08-12   by cellz
		 * ************************************************************************************************************/
		private void tbrClass_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
		{
			switch(tbrClass.Buttons.IndexOf(e.Button))
			{
				//新增操作
				case 1: 
					//实例化新窗体用于信息的详细显示,并将listview作为第一参数传递给新窗体,第二参数设为为1表示是新增操作
					CfrmPlatFClassInfo  frmPlatFClassInfo = new CfrmPlatFClassInfo(lvClass,1);
					try
					{
						frmPlatFClassInfo.ShowDialog();
				    }
					catch
					{
						ErrorCode E = new ErrorCode();
						E.ShowMessage(8);//窗体打开错误
						return;
					}
					
					Thread th = new Thread(new ThreadStart(thRefresh));
					th.Start();
					break;
                //删除操作
				case 2:
					string tp_ClassID;  //由所有要删除记录的ID组成的字符串
					//实例化结构lvTagTemp,用来取得listviewitem的tag属性中保存的Classid
					lvTagTemp selectedTag = new lvTagTemp();  
					if (lvClass.SelectedItems.Count > 0 )
					{
						DialogResult result;
						result = MessageBox.Show(this,"确定要删除所有已选记录吗?","提示",MessageBoxButtons.OKCancel, MessageBoxIcon.Warning,MessageBoxDefaultButton.Button2 );
						if (result == DialogResult.OK)
						{  
							//tp_ClassID中保存所有选定记录的id,例:三条记录的id为1,12,21,tp_ClassID="(1,12,21)"
							tp_ClassID = "(";
							for (int i =0 ;i< lvClass.SelectedItems.Count-1;i++)
							{
								selectedTag = (lvTagTemp)lvClass.SelectedItems[i].Tag ;
								tp_ClassID = tp_ClassID + selectedTag.temp_id + ",";
							}
							//添加最后一个ID
							selectedTag = (lvTagTemp)lvClass.SelectedItems[lvClass.SelectedItems.Count-1].Tag ;
							tp_ClassID = tp_ClassID + selectedTag.temp_id + ")";
																	
							//添加存储过程输入参数
							OracleParameter[] inParam = {new OracleParameter()};
		
							inParam[0].ParameterName = "p_ClassID";
							inParam[0].OracleType = OracleType.VarChar;
							inParam[0].Value = tp_ClassID;
			
		
	   
							//添加存储过程输出参数
							OracleParameter[] outParam = {new OracleParameter()};
							outParam[0].ParameterName = "p_Result";
							outParam[0].OracleType = OracleType.Int32;
							outParam[0].Direction = ParameterDirection.Output;

							//删除存储过程的调用
							GlobleHelper.ExecStoredProc("SP_charge_DELCLASS", inParam, ref outParam);
							//MessageBox.Show(Convert.ToString(outParam[0].Value));    //显示存储过程返回码
							if (Convert.ToInt32(outParam[0].Value) == 0)
							{
										

								for (int i =0 ;i< lvClass.SelectedItems.Count;)
								{
									try
									{
										lvClass.Items.RemoveAt(lvClass.SelectedIndices[0]);
									}
									catch(Exception)
									{}
								}
								MessageBox.Show("删除成功!");
							}
							else
							{
								if (Convert.ToInt32(outParam[0].Value) == -2292) //-2292是oracle错误码,表示删除违反外键约束
								{
									MessageBox.Show("要删除的班级已被学生信息引用,请先删除相关学生信息!");
								}
								else
								{
									MessageBox.Show("未知数据库操作错误,请重新打开窗体!");
								}
							}
						}
					}
					else
					{
						MessageBox.Show("请选择需要删除的记录!");
						return;
					}
					thRefresh();
					break;	
			
				case 3:
					this.Close();
					break;
			}
		}

		
	

		



		private void lvClass_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
		{
			this.lvClass.ListViewItemSorter = new SortBySubItem(e.Column);         
			lvClass.Sort();
		}

		private void trvDept_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
		{
			//实例化结构trvTagTemp
			trvTagTemp selectedTag = (trvTagTemp)e.Node.Tag ;	
			
			
			switch (selectedTag.temp_type) //节点类型
			{
				case 0://学生下部门节点
					lvClass.Items.Clear();
					e.Node.Nodes.Clear();
					GetDepttree(e.Node);
					GetClassList(e.Node);
					break;
				case 1://学生下部门节点
					lvClass.Items.Clear();
					e.Node.Nodes.Clear();
					GetDepttree(e.Node);	
					GetClassList(e.Node);
					break;							
				default:
					break;
			}
		}

		private void thRefresh()
		{
			if (trvDept.SelectedNode ==null)
			{
				return;
			}
			//实例化结构trvTagTemp
			trvTagTemp tp_selectedTag = (trvTagTemp)trvDept.SelectedNode.Tag ;	
			switch (tp_selectedTag.temp_type) //节点类型
			{			
				case 1://学生下部门节点
					lvClass.Items.Clear();
					GetClassList(trvDept.SelectedNode);//获得某部门的班级列表	
					break;			
				default:
					break;
			}
			
		}
		public class SortBySubItem : System.Collections.IComparer
		{
			private int m_Column = 0;
			public SortBySubItem(int Column)
			{
				m_Column = Column;
				
			}
			int IComparer.Compare(object x, object y)
			{
				ListViewItem item1 = (ListViewItem)x;
				ListViewItem item2 = (ListViewItem)y;
				
				int aa= String.Compare(item1.SubItems[m_Column].Text,
					item2.SubItems[m_Column].Text);
				return aa;
			}
		}
	}
}

⌨️ 快捷键说明

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