title: OnCheckChanged not Firing when Unchecked
body: <p>I've googled this topic as much as i could, ive found similar topics around and even on stackoverflow but none were able to resolve my issue. I have a nested gridview bound to a sqldatasource that populates a few fields as well as a checkbox field from a 'bits' field in the database. The checkboxes populate correctly from the database (checked vs. unchecked) but my 'OnCheckedChanged' event only fires when i check a checkbox but does NOT fire when it is unchecked, the page just goes through its post back. I have 'EnableViewState' set to true on the master page, local page, and on the control as well as auto post back. What i need to do is update the DB with the new value of the checkbox (checked vs unchecked) and reload. Please let me know if anyone has suggestions. </p>
  
  <pre><code>Protected Sub Gridview3_OnCheckedChanged(Sender As Object, e As EventArgs)
      Dim checkbox As CheckBox = TryCast(Sender, CheckBox)
      Dim gridview3 As GridView = checkbox.Parent.Parent.Parent.Parent
      Dim row As GridViewRow = checkbox.Parent.Parent
      sql_insert(String.Format("UPDATE [STOREIT2-PORTAL].dbo.AA5VOLUMES SET PROTECTED = '{0}' WHERE GUID = '{1}' AND AGENTID = '{2}'", checkbox.Checked, gridview3.DataKeys(row.RowIndex).Values("GUID").ToString, gridview3.DataKeys(row.RowIndex).Values("AgentID").ToString))
  End Sub
  
  &lt;asp:GridView ID="Gridview3" EnableViewState="true" runat="server"  AutoGenerateColumns="False" DataKeyNames="AgentID,GUID" OnRowDataBound="GridView3_OnRowDataBound" RowStyle-CssClass ="row" AlternatingRowStyle-CssClass="altrow" RowStyle-HorizontalAlign="Center" CssClass="gvmain"&gt; &lt;AlternatingRowStyle CssClass="altrow"&gt;&lt;/AlternatingRowStyle&gt;
         &lt;columns&gt;
             &lt;asp:BoundField DataField="AgentID" HeaderText="AgentID" SortExpression="AgentID" visible="false"/&gt;
             &lt;asp:BoundField DataField="GUID" HeaderText="GUID" SortExpression="GUID" visible="false"/&gt;
             &lt;asp:BoundField DataField="VolumeName" HeaderText="VolumeName" SortExpression="VolumeName" readonly="true"/&gt;
             &lt;asp:BoundField DataField="Label" HeaderText="Label" SortExpression="Label" nulldisplaytext="&lt;i&gt;{No Label}&lt;/i&gt;" readonly="true"/&gt;
             &lt;asp:BoundField DataField="BaseCount" HeaderText="BaseCount" SortExpression="BaseCount" nulldisplaytext="&lt;i&gt;{No Base Images}&lt;/i&gt;" readonly="true"/&gt;
             &lt;asp:BoundField DataField="TimeStamp" HeaderText="TimeStamp" SortExpression="TimeStamp" nulldisplaytext="&lt;i&gt;{Volume has no recent snapshots}&lt;/i&gt;" readonly="true"/&gt;
             &lt;asp:TemplateField headertext="Protected"&gt;
                &lt;ItemTemplate&gt;
                   &lt;asp:CheckBox ID="Protected" EnableViewState="true" runat="server" autopostback="true" checked='&lt;%# Eval("Protected")%&gt;' OnCheckedChanged="Gridview3_OnCheckedChanged"/&gt;  
                &lt;/ItemTemplate&gt;
             &lt;/asp:TemplateField&gt;
         &lt;/columns&gt;
  &lt;/asp:GridView&gt;   
  </code></pre>