1. 程式人生 > >C#學習之第七天

C#學習之第七天

先說說已完成的部分,因為這部分是在上課時間寫的,所以沒記得特別細。

上課寫的部分是加了一個快速搜尋欄,可以輸入學號後對datagridview中的值快速搜尋,我覺得這個控制元件甚至可以當做一個數據儲存結構來用,只要將其可見性設定為false就可以了。

首先加一個textbox控制元件,然後本想找那個text屬性來的,結果沒找到,在form的初始化方法裡邊加了一個datainit方法,裡邊用於將textbox的值設定為"輸入學號快速查詢",這個是用來提示使用者的,然後給這個textbox控制元件設定一個單擊事件,當滑鼠選中它時,自動將text清空方便使用者輸入,在焦點離開這個控制元件時,再將其恢復為提示詞,當然這個還可以進一步優化,就是焦點離開控制元件時再判斷一下里邊的值是否為空,不為空則不恢復為提示詞,這個以後再說。

然後在textbox控制元件的textchanged事件裡,寫上遍歷表格,如有

 if (dataGridView1.Rows[i].Cells[2].Value.ToString().Trim().IndexOf(textBox1.Text.Trim()) != -1)
                {
                    dataGridView1.ClearSelection();
                    dataGridView1.Rows[i].Selected = true;
                    dataGridView1.FirstDisplayedScrollingRowIndex = i;
                    break;
                }
第一行是用來判斷是否包含這個搜尋詞的字串,然後清楚所有選定,避免多選的情況,再設定為selected狀態,
FirstDisplayedScrollingRowIndex 
是為了將檢視滾動至被選中的那行上。

下一步就是新增狀態列,顯示應到人數和實到人數。


當刷卡時和手動點選簽到時發生一個遍歷簽到狀態的方法,然後統計人數並重新整理狀態列。

目前遇到的問題是


我試了valuechanged事件,還有mouseup事件,還有contentclick事件,但是都不能得到想要的效果,總是比重新整理的值半一步,換一個說法就是,在我遍歷之後這個checkbox的值才會被設定為true,所以我統計的人數總是比實際的少一個。

結論是隻有當焦點離開輸入框的時候值的改變才會生效。

想了半天,最終的解決辦法是一個我認為很巧妙的方法,就是給mouseup事件寫一條語句,讓其currentcell=null,也就是當滑鼠擡起的那一該自動讓其取消焦點,這樣就相當於自動給這個值點了一下確定,這樣就能正常工作了。累死腦子了。。