2012-10-26 36 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