在本节中我们将接着上几节的内容继续添加新的功能窗体,首先,我们要添加F_ClearData窗体,其次设计F_Stat窗体。F_ClearData窗体能够实现针对不同等级的用户实现不同的功能的限制,通过简单的点选按钮完成由权限限定的功能的设置,窗体的界面设计如下:
通过checkBox和Button按钮的组合实现功能需求,当点击全选,则会实现全部的CheckBox处于选中的状态,当点击清空时,则会清除所选定的CheckBox的选中状态,因功能需求比较简单,主要用到CheckBox 、GroupBox控件和Button控件。
界面设计完成后,窗体的功能的实现,以及代码的实现:
1.首先定义一个MyModule类的对象,并实例化:
ModuleClass.MyModule MyMC = new ModuleClass.MyModule(); 2.当点击清空按钮时,实现的功能是所有CheckBox都成为未选中状态。实现的功能响应的事件处理代码如下:PRivate void but_clear_Click(object sender, EventArgs e) { MyMC.Clear_Table(groupBox1.Controls, "Table_"); } 其中,Clear_Table()方法实在MyModule类中实现的,具体的实现方法将在MyModule类的设计中详细介绍。3.实现全选的功能,这个功能需要实现此控件的MouseDown事件,不在实现其Click事件,当我们点选时,触发的是MouseDown事件,而不是在这个控件上点击所引发的Click事件,事件响应代码如下:
private void ALL_Table_MouseDown(object sender, MouseEventArgs e) { //设置一个状态变量 bool tt = false; if (((CheckBox)sender).Checked == true) tt = false; else tt = true; //遍历groupBox1中所有控件,并修改对应状态 foreach (Control C in groupBox1.Controls) { string sID = C.Name; if (sID.IndexOf("Table_") > -1) { ((CheckBox)C).Checked = tt; } } } 4.在设计时,所有人员应该属于其中的一个部门,当不进行部门类别的设置时,其他的类别是不能够进行设置的,故在这里设计“部门类别”CheckBox控件的选中状态来确定 是否其他的控件选项是个否可选,相当于一个开关功能,所以实现了这个控件的MouseUp事件,当鼠标的左键点松开后就可以进行选择了(CheckBox的Checked属性默认 为可选),事件的响应代码如下:private void Table_Branch_MouseUp(object sender, MouseEventArgs e) { if (((CheckBox)sender).Checked == false) { ALL_Table.Checked = false; } } 当点击退出时,其响应的Click事件相应程序中添加:this.Close();关闭窗口就可以了。接下来设计F_Stat窗体,这个窗体是进行简单的人事资料统计统计使用的,通过拖拽控件进行界面设计,界面的设计如下:
设计较为简单,使用了两个GroupBox控件和一个listbox控件以及一个GridView控件来实现人事统计的功能。功能大体是通过左边的listBox控件点选条件,右边的GridView控件中,按照条件显示对应的结果。
在窗体进行加载时,需要完成一部分工作,窗体的Load事件如下:
private void F_Stat_Load(object sender, EventArgs e) { listBox1.Items.Clear(); for (int i = 0; i < A_Value.Length; i++) listBox1.Items.Add("按" + A_Value[i] + "统计"); Stat_Class(0); } 这个加载事件可以将储存在A_Value字段中的条件填充到ListBox里面,主要是Items.Clear()方法和Items.Add()方法的使用。同时,方法中调用了一个Stat_Class()方法,这个方法的设计如下:public void Stat_Class(int n) { MyDS_Grid = MyDataClass.GetDataSet("select " + A_Field[n] + " as '" + A_Value[n] + "', count(" + A_Field[n] + ") as '人数' from tb_stuffbusic group by " + A_Field[n], "tb_Stuffbusic"); dataGridView1.DataSource = MyDS_Grid.Tables[0]; dataGridView1.Columns[0].Width = 120; dataGridView1.Columns[1].Width = 55; } 这个方法主要是结合相应的查询条件,剩余的是对GridView中列的宽度的属性设置,转换为对应的查询语句通过GetDataSet方法返回一个DataSet类型的返回值,GetDataSet方法实在MyMeans类中实现的,此方法的实现将会在后续进行补充。1.首先,定义字段以及对象的实例化:
DataClass.MyMeans MyDataClass = new DataClass.MyMeans(); public static string Term_Field = "Folk,Age,Kultur,Marriage,Sex,Visage,WorkLength,Employee,Business,Laborage,Branch,Duthcall,School,Speciality,Pact_Y,BeAware,City"; public static string Term_Value = "民族类别,年龄,文化程度,婚姻,性别,政治面貌,工龄,职工类别,职务类别,工资类别,部门类别,职称类别,毕业学校,主修专业,合同年限,籍贯所在省,籍贯所在市"; public static string[] A_Field = Term_Field.Split(Convert.ToChar(',')); public static string[] A_Value = Term_Value.Split(Convert.ToChar(',')); public static DataSet MyDS_Grid; 2.上述定义中存在一个转换过程,将静态变量Term_Field里面的字符按照“,”进行分割,用到了适用于字符串处理的split函数,和一个字符串转换函数,Convert.ToChar(),按照同样的方式,将Term_Value也进行了同样的处理,这样做可以较为方便进行更改,再添加内容时,不必改动程序中的其他部分。为了实现上述功能,完成点击事件的相应,所以应设计其Click事件响应程序,利用listBox中selectedindex的值作为Stat_Class方法的参数值,代码如下:private void listBox1_Click_1(object sender, EventArgs e) { Stat_Class(listBox1.SelectedIndex); } }两个窗体的基本设计已经完成,下一步我们将设计F_Find窗体。
新闻热点
疑难解答