📄 frmplatfstutree.cs
字号:
NewNode.ImageIndex = 6;
}
}
Node.Expand();
}
}
else
{
MessageBox.Show("未知数据库操作错误,请重新打开窗体!");
}
}
private void trvDept_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
//实例化结构trvTagTemp
trvTagTemp selectedTag = (trvTagTemp)e.Node.Tag ;
try
{
switch (selectedTag.temp_type) //节点类型
{
case 0://学生下部门节点
lvStuTree.Items.Clear();
e.Node.Nodes.Clear();
GetDepttree(e.Node);
GetClasstree(e.Node);
break;
case 1://学生下部门节点
lvStuTree.Items.Clear();
e.Node.Nodes.Clear();
GetDepttree(e.Node);
GetClasstree(e.Node);
break;
case 2://班级节点
GetSUserList(e.Node);//获得某班级的学生列表
break;
default:
break;
}
}
catch(Exception ee)
{
MessageBox.Show("展开节点出错,消息如下:\r\n"+ee.Message,"消息:",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;
}
}
/****************************************************************************
Function Description:
获得某个班级的用户列表
Arguments:
Node 当前点击的树结点,即当前班级
Return Value:
NONE
History:
Modified on 07/23/2004 by may-fly@tom.com
*****************************************************************************/
private void GetSUserList(TreeNode Node)
{
if(Node == null)
{
return;
}
string strDtName = "dtUser";
DataSet dsUser = new DataSet();
//实例化结构trvTagTemp
if(Node.Tag == null)
{
return;
}
trvTagTemp selectedTag = (trvTagTemp)Node.Tag ;
int ClassID = Convert.ToInt32(selectedTag.temp_id);
//存储过程的名称
string strProcedureName = "SP_charge_GETSTUBYCLASSID";
//输出参数(两个)
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_ClassID";
inParam[0].Value = ClassID;
//调用CStoreProc的RunProcedure方法,更新dtDept,dsUser
int nReturn;
nReturn = GlobleHelper.ExecStoredProc(strProcedureName, inParam, ref outParam, ref dsUser);
if (nReturn != 7)
{
nReturn = Convert.ToInt32(outParam[0].Value);
if (nReturn == 0)
{
foreach(DataTable dtTable in dsUser.Tables)
{
dtTable.TableName = strDtName;
//做一些初始化工作
lvStuTree.ListViewItemSorter=null;
lvStuTree.BeginUpdate();//防止闪烁
lvStuTree.Items.Clear();
lvStuTree.Columns.Clear();
string[] UserFieldInfo = {"姓名","性别","学号","类别","专业",
"入学时间"};
for (int i = 0; i <= 5; i++)
{
lvStuTree.Columns.Add(UserFieldInfo[i], 80, HorizontalAlignment.Center);
}
int j = 0;
foreach (DataRow myRow in dtTable.Rows)
{
//在listview中显示数据
ListViewItem lvi;
//依次添加每列的数据
lvi = lvStuTree.Items.Add(myRow["Name"].ToString(), j);
lvi.SubItems.Add(myRow["Sex"].ToString());
lvi.SubItems.Add(myRow["UserNumber"].ToString());
lvi.SubItems.Add(myRow["ClassName"].ToString());
lvi.SubItems.Add(myRow["MajorName"].ToString());
System.DateTime dtEnro = Convert.ToDateTime(myRow["EnroDate"]);
lvi.SubItems.Add(dtEnro.ToString("yyyy-MM-dd"));//转换一下日期格式
lvTagTemp TagTemp= new lvTagTemp();//为结构lvTagTemp分配内存
TagTemp.temp_id = myRow["UserID"].ToString();
lvi.Tag = TagTemp;
j++;
}
lvStuTree.EndUpdate();
lvStuTree.Refresh();
}
}
else
{
ErrorCode errCode = new ErrorCode();
errCode.ShowMessage(nReturn);
}
}
else
{
ErrorCode errCode = new ErrorCode();
errCode.ShowMessage(nReturn);
}
}
/***************************************************************************************************************
* 功能:将listview与数据库记录集绑定,并在listview中显示出来,数据库记录集使用OracleDataReader
*
* 输入参数:1、lvDataReader,使用OracleDataReader生成的记录集,将其绑定在sLV上
* 2、sLV,要绑定的listview名称
* 输出参数:无
*
* 最后修改时间:04-08-12 by cellz
* ************************************************************************************************************/
private void BindingsListView(OracleDataReader lvDataReader,ListView sLV)
{
sLV.View=View.Details;
sLV.GridLines=true;
sLV.ListViewItemSorter=null;
sLV.Columns.Add ("状态",80,HorizontalAlignment.Center);
for(int i=0;i<lvDataReader.FieldCount;i++)
{
//生成listview列头标,调用CaseName函数以中文显示列头
sLV.Columns.Add ( lvDataReader.GetName(i),80,HorizontalAlignment.Center);
}
sLV.Columns.RemoveAt(1); //因为第二列标是无意义的id字段,所以删除第二列标
lvTagTemp TagTemp= new lvTagTemp();//为结构lvTagTemp分配内存
while (lvDataReader.Read ())
{
ListViewItem cmicItem=new ListViewItem();
//将第一个id字段以结构的形式赋给viewitem的tag属性
TagTemp.temp_id = lvDataReader.GetValue(0).ToString().Trim();
cmicItem.Tag = TagTemp;
//(cmicItem.Tag as lvTagTemp).temp_id ; //tag属性的使用方法
cmicItem.Text= "";
//从第二个字段开始依次从viewitem的第二列开始显示
for(int i=1;i<lvDataReader.FieldCount;i++)
{
cmicItem.SubItems.Add(lvDataReader.GetValue(i).ToString().Trim());
}
sLV.Items.Add(cmicItem);
}
}
/***************************************************************************************************************
* 功能:当对listview中某行双击时,通过此方法弹出新窗体显示该行信息
*
* 输入参数:1、sender
* 2、e
* 输出参数:无
*
* 最后修改时间:04-08-12 by cellz
* ************************************************************************************************************/
private void thRefresh()
{
if (trvDept.SelectedNode ==null)
{
return;
}
//实例化结构trvTagTemp
trvTagTemp tp_selectedTag = (trvTagTemp)trvDept.SelectedNode.Tag ;
try
{
switch (tp_selectedTag.temp_type) //节点类型
{
case 0://学生下部门节点
lvStuTree.Items.Clear();
trvDept.SelectedNode.Nodes.Clear();
GetDepttree(trvDept.SelectedNode);
GetClasstree(trvDept.SelectedNode);
break;
case 1://学生下部门节点
lvStuTree.Items.Clear();
trvDept.SelectedNode.Nodes.Clear();
GetDepttree(trvDept.SelectedNode);
GetClasstree(trvDept.SelectedNode);
break;
case 2://班级节点
GetSUserList(trvDept.SelectedNode);//获得某班级的学生列表
break;
default:
break;
}
}
catch(Exception ee)
{
MessageBox.Show("展开节点出错,消息如下:\r\n"+ee.Message,"消息:",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;
}
}
/***************************************************************************************************************
* 功能:当对toolbar单击时的处理操作,有新增、浏览、删除、查询、退出按钮
*
* 输入参数:1、sender
* 2、e
* 输出参数:无
*
* 最后修改时间:04-08-12 by cellz
* ************************************************************************************************************/
private void tbrStuTree_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
switch(tbrStuTree.Buttons.IndexOf(e.Button))
{
case 1:
CfrmPlatFStudentInfo frmPlatFStudentInfo = new CfrmPlatFStudentInfo(lvStuTree,1,1);
frmPlatFStudentInfo.ShowDialog();
break;
//删除操作
case 2:
string tp_StuTreeID; //由所有要删除记录的ID组成的字符串
//实例化结构lvTagTemp,用来取得listviewitem的tag属性中保存的StuTreeid
lvTagTemp selectedTag = new lvTagTemp();
if (lvStuTree.SelectedItems.Count > 0 )
{
DialogResult result;
result = MessageBox.Show(this,"确定要删除所有已选记录吗?","提示",MessageBoxButtons.OKCancel, MessageBoxIcon.Warning,MessageBoxDefaultButton.Button2 );
if (result == DialogResult.OK)
{
int errorcode =0;//选中的学生纪录中由于外键约束而无法被删除的学生纪录条数
bool errorsign = false;//标志选中的纪录中是否存在因外键约束以外未知因素而无法删除的学生纪录
for (int i =0 ;i< lvStuTree.SelectedItems.Count;i++)
{
selectedTag = (lvTagTemp)lvStuTree.SelectedItems[i].Tag ;
tp_StuTreeID = selectedTag.temp_id ;
//添加存储过程输入参数
OracleParameter[] inParam = {new OracleParameter()};
inParam[0].ParameterName = "p_StudentID";
inParam[0].OracleType = OracleType.Char;
inParam[0].Value = tp_StuTreeID;
//添加存储过程输出参数
OracleParameter[] outParam = {new OracleParameter()};
outParam[0].ParameterName = "p_Result";
outParam[0].OracleType = OracleType.Int32;
outParam[0].Direction = ParameterDirection.Output;
//删除存储过程的调用
GlobleHelper.ExecStoredProc("SP_charge_DELSTUDENT", inParam, ref outParam);
//ListView中此条纪录对应学生信息已在学生表和用户表中被删除,更改此项的Tag属性
if (Convert.ToInt32(outParam[0].Value) == 0)
{
selectedTag.temp_id = "0";
lvStuTree.SelectedItems[i].Tag = selectedTag;
}
else
{
if (Convert.ToInt32(outParam[0].Value) == -2292) //-2292是oracle错误码,表示删除违反外键约束
{
errorcode = errorcode +1;
}
else
{
errorsign = true;
}
}
}
if ((errorcode == 0)&&(!errorsign))//选中在数据库中都被成功删除
{
//在ListView中逐一移去被选中项
for (int i =0 ;i< lvStuTree.SelectedItems.Count;)
{
try
{
lvStuTree.Items.RemoveAt(lvStuTree.SelectedIndices[0]);
}
catch(Exception)
{}
}
MessageBox.Show("删除成功!");
}
else //存在其对应纪录在数据库中无法删除的项
{
//逐一验证ListView中项,如果其所对应学生纪录在数据库中被成功删除,则在ListView中移去此项
for (int i =0 ;i< lvStuTree.SelectedItems.Count;)
{
selectedTag = (lvTagTemp)lvStuTree.SelectedItems[i].Tag;
if (selectedTag.temp_id == "0")
{
try
{
lvStuTree.Items.RemoveAt(lvStuTree.SelectedIndices[i]);
}
catch(Exception)
{}
}
else
{
i++;
}
}
if (errorsign)//ListView选中项中存在由于非外键约束因素而在数据库中无法删除对应学生纪录的项
{
if (errorcode>0)
{
MessageBox.Show("剩余" + errorcode +"条被其他表引用,无法删除!" +"\n 因未知错误而无法删除一些记录!");
}
else
{
MessageBox.Show ("因未知错误而无法删除一些记录!");
}
}
else
{
MessageBox.Show("剩余" + errorcode +"条无法删除!");
}
}
}
}
else
{
MessageBox.Show("请选择需要删除的记录!");
return;
}
break;
case 3:
this.Close();
break;
}
}
private void lvStuTree_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
this.lvStuTree.ListViewItemSorter = new SortBySubItem(e.Column);
lvStuTree.Sort();
}
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 + -