2012-10-26 34 views
1

我想更新數據,當我檢查gridview。在我希望從複選框獲取值之前,我的代碼只能從數據庫返回數據。我檢查後我想要當前值。如何從gridview複選框的複選框OnCheckedChanged

代碼隱藏: -

protected void chkSelected_CheckedChanged(object sender, EventArgs e) 
{ 
    for (int rowIndex = 0; rowIndex < GridView1.Rows.Count; rowIndex++) 
    { 
     if (Convert.ToString(GridView1.Rows[rowIndex].Cells[4].Text) != "") 
     { 
      Response.Write("true"); 
     } 
     else 
     { 
      Response.Write("fasle"); 
     } 
    } 
} 

設計規範: -

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" 
       CellPadding="4" GridLines="None" ForeColor="#333333" Font-Size="Smaller" 
       AutoGenerateColumns="False"> 
    <RowStyle BackColor="#EFF3FB" /> 
    <Columns> 
     <asp:BoundField DataField="LevelID" HeaderText="ลำดับข้อ" ReadOnly="True" 
         ItemStyle-Width="50" > 
     </asp:BoundField> 
     <asp:BoundField DataField="LevelDesc" HeaderText="คำถาม" ReadOnly="True" 
         ItemStyle-Width="250" > 
     </asp:BoundField> 
     <asp:BoundField DataField="ChoiceID" HeaderText="ข้อย่อย" ReadOnly="True" 
         ItemStyle-Width="50" > 
     </asp:BoundField> 
     <asp:BoundField DataField="ChoiceDesc" HeaderText="คำถามย่อย" ReadOnly="True" 
         ItemStyle-Width="400" > 
     </asp:BoundField> 
     <asp:TemplateField HeaderText="ใช่">   
      <ItemTemplate>    
       <asp:CheckBox ID="chkSelected" runat="server" Checked='<%# Eval("Selected").ToString().Equals("True") %>' 
        AutoPostBack="true" OnCheckedChanged="chkSelected_CheckedChanged" CssClass="chkBox" />   
      </ItemTemplate>  
     </asp:TemplateField> 
    </Columns> 
    <FooterStyle BackColor="#507CD1" ForeColor="White" Font-Bold="True" /> 
    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
    <HeaderStyle BackColor="#0000CD" Font-Bold="True" ForeColor="White" /> 
    <EditRowStyle BackColor="#2461BF" /> 
    <AlternatingRowStyle BackColor="White" /> 
</asp:GridView> 

回答

3

使用GridViewRow如下...你可以得到被使用NamingContainer檢查複選框的當前行財產如下...

編輯: - 更改的標記,並添加Hiddenfield持有價值被選定爲後續...

<asp:TemplateField HeaderText="ใช่">   
      <ItemTemplate>    
       <asp:CheckBox ID="chkSelected" runat="server" Checked='<%# Eval("Selected").ToString().Equals("True") %>' 
        AutoPostBack="true" OnCheckedChanged="chkSelected_CheckedChanged" CssClass="chkBox" />  
       <asp:HiddenField ID="hiddenField1" Value='<%# Eval("Selected").ToString() %>' runat="server" />  
      </ItemTemplate>  
</asp:TemplateField> 

然後你就可以得到Hiddenfield如下,它的價值,以及

protected void chkSelected_CheckedChanged(object sender, EventArgs e) 
    { 
     GridViewRow row = (GridViewRow)(((CheckBox)sender).NamingContainer); 
     HiddenField hdnCheck=(HiddenField)row.Cells[4].FindControl("hiddenField1"); 
     if (Convert.ToString(hdnCheck.Value != "") 
      { 
       Response.Write("true"); 
      } 
      else 
      { 
       Response.Write("fasle"); 
      } 

     Edit:-//You can easily get Checkbox which has been cheked,and do your logic 
     CheckBox chkSelect=(CheckBox)sender; 
     if (chkSelect.Checked) 
      { 
       Response.Write("true"); 
      } 
      else 
      { 
       Response.Write("fasle"); 
      }  
    } 
+0

您的代碼是工作!但如果數據庫中的數據是'真',當我檢查它返回'假',如果數據庫中的數據是'空',當我檢查它也返回'假'。 – SueSaya

+0

通過查看您的代碼,您已將「選定」值綁定到複選框,當gridview被渲染時將顯示該複選框......點擊該複選框時,您要達到的目標是什麼? –

+0

我想要複選框的當前狀態。如果我選中複選框時數據庫中的數據爲真,則返回值爲false。 – SueSaya