在本節中我們將接著上幾節的內容繼續添加新的功能窗體,首先,我們要添加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窗體。
新聞熱點
疑難解答