主窗體作為與用戶交流的載體,已經(jīng)初步設(shè)計(jì)完成,當(dāng)我們按下某一個(gè)功能按鈕時(shí),能夠得到一個(gè)相應(yīng)功能的窗體,我們暫且稱這些窗體為子窗體。
設(shè)計(jì)了10個(gè)子窗體來實(shí)現(xiàn)相應(yīng)的功能,將這10個(gè)子窗體放置到PerForm文件夾下,10個(gè)窗體的名字分別為:F_AddressList,F(xiàn)_ClearData,F(xiàn)_Find,F(xiàn)_HaveBack,F(xiàn)_ManFile,F(xiàn)_Stat,F(xiàn)_User,F(xiàn)_UserAdd,F(xiàn)_UserPope,F(xiàn)_WordPad。分別實(shí)現(xiàn)地址查詢,數(shù)據(jù)清除,人事查詢,數(shù)據(jù)庫恢復(fù),認(rèn)識(shí)瀏覽,人事資料統(tǒng)計(jì),用戶資料,添加用戶,用戶權(quán)限設(shè)置和記事本功能。
這一節(jié),首先設(shè)計(jì)F_AddressList,設(shè)計(jì)按照查詢條件和查詢類型的條件來進(jìn)行查詢,找到所想要的數(shù)據(jù)。其中會(huì)用到SQL查詢的相關(guān)知識(shí),若能補(bǔ)充相關(guān)知識(shí),則對(duì)于理解會(huì)有很大的幫助。
設(shè)計(jì)界面如下:

窗體中使用Grid'View控件來顯示查詢到的數(shù)據(jù),查詢類型使用一個(gè)ComBox控件來提供用戶選擇查詢類型,利用TextBox控件來接收查詢條件,同時(shí)設(shè)計(jì)了四個(gè)Button按鈕,實(shí)現(xiàn),添加,修改,刪除,退出功能。
當(dāng)設(shè)計(jì)好界面之后,開始實(shí)現(xiàn)各個(gè)功能:
1. 定義兩個(gè)實(shí)例化的對(duì)象,MyClass和MyModule
[csharp] view plain copy
DataClass.MyMeans MyDataClass = new DataClass.MyMeans(); ModuleClass.MyModule MyMC = new ModuleClass.MyModule();聲明一個(gè)DataSet“數(shù)據(jù)容器”,用來通過SqlDataReader類查詢結(jié)果
[csharp] view plain copypublic static DataSet MyDS_Grid;//查詢得到tb_AddressBook表中所有項(xiàng),實(shí)現(xiàn)對(duì)信息的添加等操作
[csharp] view plain copypublic static string AllSql = "Select ID,Name as 姓名, Sex as 性別 , Phone as電話,WordPhone as 工作電話,Handset as 手機(jī), QQ as QQ號(hào),E_Mail as 郵箱地址 from tb_AddressBook";//Find_Field-->存放查詢字段,對(duì)應(yīng)于TextBox控件
[csharp] view plain copypublic static string Find_Field = "";
2.當(dāng)窗體生成時(shí)需要調(diào)用窗體的LOAD事件,完成相應(yīng)的工作,其需要調(diào)用一個(gè)showAll()方法,此方法的調(diào)用及設(shè)計(jì)如下:[csharp] view plain copypublic void ShowAll() { ModuleClass.MyModule.Address_ID = ""; //用dataGridView控件顯式職工姓名 MyDS_Grid = MyDataClass.GetDataSet(AllSql, "tb_AddressBook"); //設(shè)置控件的數(shù)據(jù)來源,datasoursce dataGridView1.DataSource = MyDS_Grid.Tables[0]; //設(shè)置第一列不可見 dataGridView1.Columns[0].Visible = false; //根據(jù)查詢結(jié)果實(shí)現(xiàn)對(duì)Button控制其是否可以使用 if (dataGridView1.RowCount > 1) { Address_Amend.Enabled = true; Address_Delete.Enabled = false; } else { Address_Amend.Enabled = false; Address_Delete.Enabled = false; } } Z%7B2E9[B%][IM.png)
Z%7B2E9[B%][IM.png)
Z%7B2E9[B%][IM.png)
Z%7B2E9[B%][IM.png)




load事件中調(diào)用showAll()方法:
[csharp] view plain copyPRivate void F_AddressList_Load(object sender, EventArgs e) { ShowAll(); }3.當(dāng)點(diǎn)擊查詢按鈕時(shí),則需要進(jìn)行查詢操作,通過實(shí)現(xiàn)Button的Click事件來完成功能的實(shí)現(xiàn):
[csharp] view plain copyprivate void button5_Click(object sender, EventArgs e) { //判斷查詢條件是否為空 if (textBox1.Text == "") { MessageBox.Show("請(qǐng)輸入查詢條件。"); return; } ModuleClass.MyModule.Address_ID = ""; //使用datagridview來顯示職工的名稱 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; //當(dāng)查詢結(jié)果存在 if (dataGridView1.RowCount > 1) { Address_Amend.Enabled = true; Address_Delete.Enabled = true; } else { Address_Amend.Enabled = false; Address_Delete.Enabled = false; } }4.而ComBox控件中所設(shè)計(jì)的查詢條件選擇實(shí)現(xiàn)代碼如下:
[csharp] view plain copyprivate void comboBox1_TextChanged(object sender, EventArgs e) { //設(shè)置查詢類型條件的ComBox控件來實(shí)現(xiàn)按照條件來進(jìn)行查詢 switch (((ComboBox)sender).SelectedIndex) { case 0: { Find_Field = "Name"; break; } case 1: { Find_Field = "Sex"; break; } case 2: { Find_Field = "E_Mail"; break; } } }5.當(dāng)點(diǎn)擊全部按鈕時(shí),其Click事件相應(yīng)的代碼為:
[csharp] view plain copyprivate void button1_Click(object sender, EventArgs e) { ShowAll(); }6.當(dāng)我們需要向這個(gè)表中添加數(shù)據(jù)時(shí),則需要點(diǎn)擊“添加按鈕”,這是觸發(fā)的Click事件相應(yīng)的代碼為:
[csharp] view plain copyprivate void Address_Add_Click(object sender, EventArgs e) { //此時(shí)需要調(diào)用另一個(gè)窗體,這個(gè)窗體將在后面的文章中詳解其實(shí)現(xiàn)過程。 InfoAddForm.F_Address FrmAddress = new InfoAddForm.F_Address(); FrmAddress.Text = "通訊錄添加操作"; FrmAddress.Tag = 1; FrmAddress.ShowDialog(this); ShowAll(); }7.當(dāng)點(diǎn)擊修改按鈕時(shí),則實(shí)現(xiàn)對(duì)已有的數(shù)據(jù)進(jìn)行修改,其也是通過點(diǎn)擊按鈕,觸發(fā)此按鈕的Click事件來實(shí)現(xiàn)功能:
[csharp] view plain copyprivate void Address_Amend_Click(object sender, EventArgs e) { //調(diào)用F_Address窗體修改通訊錄信息,同一個(gè)窗體,不同的使用方式 InfoAddForm.F_Address FrmAddress = new InfoAddForm.F_Address(); FrmAddress.Text = "通訊錄修改操作"; FrmAddress.Tag = 2; FrmAddress.ShowDialog(this); ShowAll(); }8.當(dāng)點(diǎn)擊刪除按鈕時(shí),則實(shí)現(xiàn)了對(duì)已有數(shù)據(jù)進(jìn)行刪除的操作,其Click事件實(shí)現(xiàn)代碼如下:
[csharp] view plain copyprivate void Address_Delete_Click(object sender, EventArgs e) { if (MessageBox.Show("確定要?jiǎng)h除該條信息嗎?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { MyDataClass.GetA_M_D_command("Delete tb_AddressBook where ID='" + ModuleClass.MyModule.Address_ID + "'"); ShowAll(); } }點(diǎn)擊退出時(shí),則需要補(bǔ)充一句 this.Clsoe();就可以了。
9.然而,真正顯示給我們查詢結(jié)果的是GridView控件,在這里實(shí)現(xiàn)了其cell enter事件:
[csharp] view plain copyprivate 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; } }到此,窗體的設(shè)計(jì)基本完成,下節(jié)將設(shè)計(jì)F_ClearData窗體。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注