C#基础回顾:GridView全选演示
? ? ?要實現的效果:
??????方法一:
????? 首先,你需要添加一列,用于放置復選框.如果你比較熟練,可以直接通過手動寫代碼來實現.如果,你還比較生疏,那么就進入設計頁面,選擇你的GridView控件.點擊右上角的三角尖:
????? 選擇編輯列:
????? 添加一個模板列TemplateField.然后,切換到源代碼進行后續的編輯.在你的GridView控件中剛剛生成的?<asp:TemplateField>?</asp:TemplateField>標簽對之間,添加一個<HeaderTemplate></HeaderTemplate>標簽對和<ItemTemplate></ItemTemplate>標簽對.這兩個是什么意思呢?按照字面理解,應該是頭模板和項目模板.聯想一下我們的GridView控件,是不是有一個Header用來顯示列名之類的信息,而Header之下都是我們從數據源獲取的數據行呢?(當然,還有其它情況,這里不做討論).如果你想明白了,那應該已經猜到這兩個標簽對是做什么用的了.我們要利用<HeaderTemplate>在列頭處顯示一個checkbox,用這個checkbox來觸發全選和全不選的事件.而在<ItemTemplate>中添加的checkbox則會顯示在每一條數據行中.下面來看源代碼: <asp:GridView?ID="GridView1"?runat="server">
????<Columns>
????????<asp:TemplateField>
????????????<HeaderTemplate>
????????????????<asp:CheckBox?runat="server"?ID="cbHead"?OnCheckedChanged="SelectAll"?AutoPostBack="true">
????????????????</asp:CheckBox>
????????????</HeaderTemplate>
????????????<ItemTemplate>
????????????????<asp:CheckBox?runat="server"?ID="cbItem"></asp:CheckBox>
????????????</ItemTemplate>
????????</asp:TemplateField>
????</Columns>
</asp:GridView> ??????上面的代碼相信大家肯定看明白了,那如何來實現全選和全不選呢?這就需要編輯SelectAll方法,因為當我們點選了列頭的checkbox就會觸發OnCheckedChanged事件,而我們讓該事件調用SelectAll方法,利用該方法來實現效果.要添加該事件,首先要在源代碼中添加OnCheckedChanged="SelectAll" AutoPostBack="true"?語句,就如上面所給的代碼一樣.AutoPostBack屬性必須設置為true(默認為false),因為我們需要在點選該checkbox后,就讓其它數據行的checkbox也選中,也就是說必須告訴服務器"我已經選中了",只有當服務器接收到該消息,才會執行SelectAll方法.而AutoPostBack屬性就是用于設置回發的,如果設置為true,表是點選該按鈕后,就會將消息傳給服務器端,否則就不會將消息傳給服務器.
????? 啰嗦了一大堆后,繼續回來.SelectAll方法如下: SelectAll
????? 這樣,便實現了預定的效果. [備忘:GridView數據呈現形式有點像Excel,也是由行列組成,每一行又由許多單元格組成,在每一個單元格內又可以放置任意多的東西(包括控件),因此如果我們想要得到GridView某行某列的某個控件,就要用GridView.Rows[index].Cells[index].Controls[index]之類的方式]
??????方法二:
????? 但是,很明顯,采用postBack方式并不是最好的,每次點選都會產生一次回發,服務器都需要進行處理,這對服務器性能影響是很大的.(一個用戶可能還感覺不出來,如果有上千個用戶呢?).因此,最好的辦法,就是讓客戶端自己去處理選中的事件.這就需要js來幫忙.
selectAll????? 把上述js代碼添加到Head標簽中.然后對GridView源代碼進行一些修改,去掉OnCheckedChanged="SelectAll" AutoPostBack="true",添加οnclick="javascript:selectAll('GridView3',this.checked);"客戶端事件.那么現在,當你再點選列頭的checkbox時候就不會回發給服務器端處理了.
??????方法三:
????? 有些朋友發現問題了,在上述的Js中,單純地通過checkbox[i].type=='checkbox'來做判斷,那不是意味著只要GridView控件中有checkbox,就對它進行了賦值嗎,如果在其它列中也有復選框,那不是也受到連累了?
??????因此上述方法只適合于只有一列復選框的情況,但是如果出現多列復選框,怎么辦呢?
????? 我想到的方法就是通過名字來設置每一個復選框,也就是只有名字是符合的,我才對它進行操作.你可能會希望使用getElementsByName("checkbox名稱")來獲取控件,但是會發現,這樣根本查找不到控件.因為asp.net中,為了防止綁定列在解釋成HTML后出現ID、Name相同的控件,對每一個ID和NAME都進行了修改.大家可以參考這里.因此,我們只能利用控件的ClientID來獲取修改后的ID.于是我通過在cs代碼中注冊js腳本來獲取到該ID.如果,對于我所說的還不理解,請仔細閱讀代碼.
?
????? 這樣,就基本可以滿足要求了.
??????源文件下載.(采用VS 2005開發)
本文轉自stg609博客園博客,原文鏈接:http://www.cnblogs.com/stg609/archive/2009/03/18/1415326.html,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的C#基础回顾:GridView全选演示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SCCM2012升级SP1系列之配置管理
- 下一篇: python文件操作二