主窗体作为与用户交流的载体,已经初步设计完成,当我们按下某一个功能按钮时,能够得到一个相应功能的窗体,我们暂且称这些窗体为子窗体。
设计了10个子窗体来实现相应的功能,将这10个子窗体放置到PerForm文件夹下,10个窗体的名字分别为:F_AddressList,F_ClearData,F_Find,F_HaveBack,F_ManFile,F_Stat,F_User,F_UserAdd,F_UserPope,F_WordPad。分别实现地址查询,数据清除,人事查询,数据库 恢复,认识浏览,人事资料统计,用户资料,添加用户,用户权限设置和记事本功能。
这一节,首先设计F_AddressList,设计按照查询条件和查询类型的条件来进行查询,找到所想要的数据。其中会用到SQL查询的相关知识,若能补充相关知识,则对于理解会有很大的帮助。
设计界面如下:
窗体中使用Grid'View控件来显示查询到的数据,查询类型使用一个ComBox控件来提供用户选择查询类型,利用TextBox控件来接收查询条件,同时设计了四个Button按钮,实现,添加,修改,删除,退出功能。
当设计好界面之后,开始实现各个功能:
1. 定义两个实例化的对象,MyClass和MyModule
[csharp] view plain copy
DataClass.MyMeans MyDataClass = new DataClass.MyMeans(); ModuleClass.MyModule MyMC = new ModuleClass.MyModule();
声明一个DataSet“数据容器”,用来通过SqlDataReader类查询结果
public static DataSet MyDS_Grid;
//查询得到tb_AddressBook表中所有项,实现对信息的添加等操作
public static string AllSql = "Select ID,Name as 姓名, Sex as 性别 , Phone as电话,WordPhone as 工作电话,Handset as 手机, QQ as QQ号,E_Mail as 邮箱地址 from tb_AddressBook" ;
//Find_Field-->存放查询字段,对应于TextBox控件
public static string Find_Field = "" ;
2.当窗体生成时需要调用窗体的LOAD事件,完成相应的工作,其需要调用一个showAll()方法,此方法的调用及设计如下:
public void ShowAll() { ModuleClass.MyModule.Address_ID = "" ; MyDS_Grid = MyDataClass.GetDataSet(AllSql, "tb_AddressBook" ); dataGridView1.DataSource = MyDS_Grid.Tables[0]; dataGridView1.Columns[0].Visible = false ; if (dataGridView1.RowCount > 1) { Address_Amend.Enabled = true ; Address_Delete.Enabled = false ; } else { Address_Amend.Enabled = false ; Address_Delete.Enabled = false ; } }
load事件中调用showAll()方法:
private void F_AddressList_Load( object sender, EventArgs e) { ShowAll(); }
3.当点击查询按钮时,则需要进行查询操作,通过实现Button的Click事件来完成功能的实现:
private void button5_Click( object sender, EventArgs e) { if (textBox1.Text == "" ) { MessageBox.Show("请输入查询条件。" ); return ; } ModuleClass.MyModule.Address_ID = "" ; MyDS_Grid = MyDataClass.GetDataSet(AllSql + " where " + Find_Field + " like '%" + textBox1.Text.Trim() + "%'" , "tb_AddressBook" ); dataGridView1.DataSource = MyDS_Grid.Tables[0]; dataGridView1.Columns[0].Visible = false ; if (dataGridView1.RowCount > 1) { Address_Amend.Enabled = true ; Address_Delete.Enabled = true ; } else { Address_Amend.Enabled = false ; Address_Delete.Enabled = false ; } }
4.而ComBox控件中所设计的查询条件选择实现代码如下:
private void comboBox1_TextChanged( object sender, EventArgs e) { switch (((ComboBox)sender).SelectedIndex) { case 0: { Find_Field = "Name" ; break ; } case 1: { Find_Field = "Sex" ; break ; } case 2: { Find_Field = "E_Mail" ; break ; } } }
5.当点击全部按钮时,其Click事件相应的代码为:
private void button1_Click( object sender, EventArgs e) { ShowAll(); }
6.当我们需要向这个表中添加数据时,则需要点击“添加按钮”,这是触发的Click事件相应的代码为:
private void Address_Add_Click( object sender, EventArgs e) { InfoAddForm.F_Address FrmAddress = new InfoAddForm.F_Address(); FrmAddress.Text = "通讯录添加操作" ; FrmAddress.Tag = 1; FrmAddress.ShowDialog(this ); ShowAll(); }
7.当点击修改按钮时,则实现对已有的数据进行修改,其也是通过点击按钮,触发此按钮的Click事件来实现功能:
private void Address_Amend_Click( object sender, EventArgs e) { InfoAddForm.F_Address FrmAddress = new InfoAddForm.F_Address(); FrmAddress.Text = "通讯录修改操作" ; FrmAddress.Tag = 2; FrmAddress.ShowDialog(this ); ShowAll(); }
8.当点击删除按钮时,则实现了对已有数据进行删除的操作,其Click事件实现代码如下:
private void Address_Delete_Click( object sender, EventArgs e) { if (MessageBox.Show( "确定要删除该条信息吗?" , "提示" , MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { MyDataClass.GetA_M_D_command("Delete tb_AddressBook where ID='" + ModuleClass.MyModule.Address_ID + "'" ); ShowAll(); } }
点击退出时,则需要补充一句 this.Clsoe();就可以了。
9.然而,真正显示给我们查询结果的是GridView控件,在这里实现了其cell enter事件:
private void dataGridView1_CellEnter( object sender, DataGridViewCellEventArgs e) { if (dataGridView1.RowCount > 1) { ModuleClass.MyModule.Address_ID = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString(); Address_Amend.Enabled = true ; Address_Delete.Enabled = true ; } else { Address_Amend.Enabled = false ; Address_Delete.Enabled = false ; } }
到此,窗体的设计基本完成,下节将设计F_ClearData窗体。