在近在做一个Asp.net项目,想在GridView的表头中加入一个checkbox来过滤表中的数据。没想到就这么个小小的功能还遇到了一大堆的问题:
(1)、在数据行中加入checkbox倒是很简单,但在网上找了半天,就是找不到如何加入到表头。
(2)、无法触发checkbox的CheckedChanged事件,偌大的网络就是没有答案。
(3)、这个问题最让我纳闷,checkbox硬是勾选不上,对于这样的问题网络上更是没有留下一丝痕迹。
这样的问题对于我一个第一次做asp.net项目的菜鸟来说,确实比较难呀,但经过我的不懈努力还是被我解决了,兴奋之余想到给同样苦闷着的同志们分享:
问题1、
把这一列转化为TemplateField后,aspx页面源码会生成如下代码
<asp:TemplateField HeaderText="是否购买">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" DataTextField=<%# Bind("IsBuy") %>>
<asp:ListItem Text="购买" Value="1" ></asp:ListItem>
<asp:ListItem Text="自备" Value="0" ></asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Center" Width="80px" />
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("IsBuy") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
第一做asp.net项目一开始当然什么也不懂,在网上找不到帮助这号盯着上面的代码发呆,发呆的过程中我发现里面有<EditItemTemplate><ItemTemplate> ,能不能添加Header之类的标签呢,试一下吧,于是添加了下面的子标签
<HeaderTemplate>
<asp:CheckBox ID= "CbHeadIsBuy" runat ="server" Text = "显示购买" OnCheckedChanged="CbHeadIsBuy_CheckedChanged"/>
</HeaderTemplate>
这下checkbox是出来了。下面的问题也出来了。
问题2、
OnCheckedChanged事件不能触发呀。又在网上到处寻找,好像从来没人这样做似的,根本找不到答案,也别笑话我们这些菜鸟,MSDN的编排方式确实很不适合我们中国人的使用习惯,没办法了只好又发呆,突然想起以前做DropDownList的时候有个什么AutoPostBack的属性,加进去设成true试一试,哎呀!NND,果真就好了,看来是的好好看本asp.net本质方面的书好好研究一下了。(这个问题让我发呆的另一个原因是,第一次使用Checkbox,GridView的复杂性,也让我迷失了方向)。
问题3、
对于第3个问题我只给出原因和我的解决方法,
原因:checkbox硬是勾选不上是应为我在OnCheckedChanged方法中调用了GridView的DataBin方法,这个方法始终使Checkbox的checked值为初始值。
下面是Checkbox标签的最终编码:
<asp:CheckBox ID= "CbHeadIsBuy" runat ="server" Text = "显示购买" AutoPostBack="true" OnCheckedChanged="CbHeadIsBuy_CheckedChanged" Checked=<%# Convert.ToBoolean(HfCheckIsBuy.Value) %>/>
绑定一个HiddenField到checkbox的checked属性。我知道我这个方法不是最好的。希望有朋友给出更好的解决方案。