?? frmdepttree.cs
字號(hào):
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為學(xué)生部門類型顯示,2為教工部門類型顯示, 3表示所有部門類型顯示,4表示學(xué)生部門及班級(jí)顯示
private int nSelected; //選擇無用的類型 0 選擇最高節(jié)點(diǎn)無用,1 選擇最高節(jié)點(diǎn)部門節(jié)點(diǎn)無用 9 沒有無用節(jié)點(diǎn)
//構(gòu)造函數(shù),OwnerDeptName為傳入的文本框引用,DeptClass為部門類型參數(shù),Selected為部門級(jí)別參數(shù)
public CfrmDeptTree(TextBox OwnerDeptName,int DeptClass,int Selected)
{
//
// Windows 窗體設(shè)計(jì)器支持所必需的
//
InitializeComponent();
DeptName = OwnerDeptName;
nDeptClass = DeptClass;
nSelected = Selected;
//
// TODO: 在 InitializeComponent 調(diào)用后添加任何構(gòu)造函數(shù)代碼
//
}
/// <summary>
/// 清理所有正在使用的資源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗體設(shè)計(jì)器生成的代碼
/// <summary>
/// 設(shè)計(jì)器支持所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內(nèi)容。
/// </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部門顯示控件
//數(shù)據(jù)庫查詢操作,listview中按照名稱順序顯示記錄
System.Data.OracleClient.OracleConnection Org_myConn = Connection.DBConnection;
if (Org_myConn == null)
{
return;
}
//檢查有無學(xué)校信息,如無,則窗體關(guān)閉
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("數(shù)據(jù)庫查詢出錯(cuò),消息如下:\r\n"+ee.Message,"消息:",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;
}
if (!trvDataReader.HasRows)
{
MessageBox.Show("在建立部門信息之前必須建立學(xué)校信息!");
this.Close();
}
trvTagTemp TagTemp= new trvTagTemp();//為結(jié)構(gòu)trvTagTemp分配內(nèi)存
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"; //在部門部門關(guān)系表中將一級(jí)部門的上級(jí)部門ID設(shè)為0
TagTemp.temp_isexpand = 2; //表示根節(jié)點(diǎn)已展開過
//該值為0代表此節(jié)點(diǎn)是最高節(jié)點(diǎn),該值為1代表此節(jié)點(diǎn)是部門類型,該值為2代表此節(jié)點(diǎn)是班級(jí)類型
TagTemp.temp_type = 0;
rootNode.Tag = TagTemp;
}
GetDepttree(rootNode);
trvDept.CollapseAll(); //折疊所有樹節(jié)點(diǎn)
}
/****************************************************************************
Function Description:
獲得下屬部門列表
Arguments:
Type_ID 查找類別 1—查下屬有學(xué)生的部門
2—查下屬有老師的部門
3—查所有部門
Node 當(dāng)前點(diǎn)擊的樹結(jié)點(diǎn),即當(dāng)前部門
Return Value:
NONE
*****************************************************************************/
private void GetDepttree(TreeNode Node)//ok
{
string strDtName = "dtDept";
DataSet dsDept = new DataSet();
//存儲(chǔ)過程的名稱
string strProcedureName = "";
//輸出參數(shù)(兩個(gè))
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;
//輸入?yún)?shù)(兩個(gè))
OracleParameter[] inParam = {new OracleParameter(), new OracleParameter()};
//Node.tag里保存的是節(jié)點(diǎn)的類別
//實(shí)例化結(jié)構(gòu)trvTagTemp,用來取得選定treenode的tag屬性中保存的Deptid
trvTagTemp selectedTag = (trvTagTemp)Node.Tag ;
//int nTag = selectedTag.temp_type;
switch (nDeptClass)
{
//顯示學(xué)生部門類型
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;
}
//存儲(chǔ)過程的調(diào)用,更新dtDept,dsDept
GlobleHelper.ExecStoredProc(strProcedureName, inParam, ref outParam, ref dsDept);
if (Convert.ToInt32(outParam[0].Value) == 0)
{
trvTagTemp TagTemp= new trvTagTemp();//為結(jié)構(gòu)trvTagTemp分配內(nèi)存
foreach(DataTable dtTable in dsDept.Tables)
{
dtTable.TableName = strDtName;
TreeNode NewNode;
if (dtTable.Rows.Count > 0)
{
foreach (DataRow myRow in dtTable.Rows)
{
//在treeview中顯示數(shù)據(jù)
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; //表示根節(jié)點(diǎn)未展開過
TagTemp.temp_type = 1; //該節(jié)點(diǎn)是部門類型
NewNode.Tag = TagTemp;
NewNode.ImageIndex = 0;
NewNode.SelectedImageIndex = 1;
}
}
Node.Expand();
selectedTag.temp_isexpand = 2;
Node.Tag = selectedTag;
}
}
else
{
MessageBox.Show("未知數(shù)據(jù)庫操作錯(cuò)誤,請(qǐng)重新打開窗體!");
}
}
/****************************************************************************
Function Description:
獲得下屬班級(jí)列表
Arguments:
Node 當(dāng)前點(diǎn)擊的樹結(jié)點(diǎn),即當(dāng)前部門
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();
//實(shí)例化結(jié)構(gòu)trvTagTemp,用來取得選定treenode的tag屬性中保存的Deptid
trvTagTemp selectedTag = (trvTagTemp)Node.Tag ;
//存儲(chǔ)過程的名稱
string strProcedureName = "SP_charge_getclass";
//輸出參數(shù)(兩個(gè))
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;
//輸入?yún)?shù)(1個(gè))
OracleParameter[] inParam = {new OracleParameter()};
inParam[0].Direction = ParameterDirection.Input;
inParam[0].ParameterName = "p_DeptID";
inParam[0].Value = selectedTag.temp_id;
//調(diào)用CStoreProc的RunProcedure方法,更新dtDept,dsClass
GlobleHelper.ExecStoredProc(strProcedureName, inParam, ref outParam, ref dsClass);
if( Convert.ToInt32(outParam[0].Value)==0)
{
trvTagTemp TagTemp= new trvTagTemp();//為結(jié)構(gòu)trvTagTemp分配內(nèi)存
foreach(DataTable dtTable in dsClass.Tables)
{
dtTable.TableName = strDtName;
TreeNode NewNode;
if (dtTable.Rows.Count > 0)
{
foreach (DataRow myRow in dtTable.Rows)
{
//在treeview中顯示數(shù)據(jù)
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; //表示根節(jié)點(diǎn)已展開,因?yàn)槭侨~子節(jié)點(diǎn),所以默認(rèn)展開
TagTemp.temp_type = 2; //該節(jié)點(diǎn)是班級(jí)類型
NewNode.Tag = TagTemp;
NewNode.ImageIndex = 6;
}
}
Node.Expand();
}
}
else
{
MessageBox.Show("未知數(shù)據(jù)庫操作錯(cuò)誤,請(qǐng)重新打開窗體!");
}
}
private void trvDept_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
//實(shí)例化結(jié)構(gòu)trvTagTemp,用來取得選定treenode的tag屬性中保存的Deptid
trvTagTemp selectedTag = (trvTagTemp)e.Node.Tag ;
//如果未展開過則處理進(jìn)行展開
if (selectedTag.temp_isexpand == 1) //指示是否已展開
{
switch (nDeptClass) //指示顯示類型
{
case 1://學(xué)生下部門節(jié)點(diǎn)
e.Node.Nodes.Clear();
GetDepttree(e.Node);
break;
case 2://教工下部門節(jié)點(diǎn)
e.Node.Nodes.Clear();
GetDepttree(e.Node);
break;
case 3://所有部門節(jié)點(diǎn)
e.Node.Nodes.Clear();
GetDepttree(e.Node);
break;
case 4://學(xué)生下部門節(jié)點(diǎn)及班級(jí)節(jié)點(diǎn)
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) //選擇最高節(jié)點(diǎn)無效
{
return;
}
break;
case 1:
if (selectedTag.temp_type == 0) //選擇最高節(jié)點(diǎn)無效
{
return;
}
if (selectedTag.temp_type == 1) //選擇部門節(jié)點(diǎn)無效
{
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();
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -