📄 frmplatfclass.cs
字号:
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 + -