【问题标题】:How to get checkbox value from gridview when checkbox OnCheckedChanged复选框OnCheckedChanged时如何从gridview获取复选框值
【发布时间】:2019-05-22 22:43:56
【问题描述】:

当我签入gridview 时,我想更新数据。在我从复选框中获取值但我的代码仅从数据库返回数据之前。我检查后想要当前值。

代码隐藏:-

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>

【问题讨论】:

    标签: c# asp.net sql-server-2008


    【解决方案1】:

    使用GridViewRow如下...您可以获取使用NamingContainer属性检查的复选框的当前行如下...

    编辑:- 更改标记并添加 Hiddenfield 以保存 Selected 的值,如下所示...

    <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> 
    

    然后你可以得到如下的隐藏域,它的价值也是如此

    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("false");
               }
    
             // Edit: You can easily get Checkbox which has been checked, and do your logic
             CheckBox chkSelect=(CheckBox)sender;
             if (chkSelect.Checked)
               {
                   Response.Write("true");
               }
               else
               {
                   Response.Write("false");
               }    
        }
    

    【讨论】:

    • 你的代码可以工作了!但是如果我检查时数据库中的数据为“真”,则返回“假”,如果我检查时数据库中的数据为“空”,则也返回“假”。
    • 通过查看您的代码,您已将“已选择”值绑定到复选框,该复选框将在呈现 gridview 时显示...单击该复选框您究竟想要实现什么?
    • 我想要复选框的当前状态。如果当我选中复选框时数据库中的数据为真,则返回值为假。
    • 我试了一下,但只有当我选中复选框时它才会返回数据库中的数据。如果我检查时数据库中的数据为假,则始终返回假,并且当我检查时,数据库中的数据也始终为真。
    • 你希望当复选框被选中时它应该返回true,反之亦然,不管数据库中有什么值?
    猜你喜欢
    • 1970-01-01
    • 2017-11-03
    • 2020-03-08
    • 1970-01-01
    • 2017-10-06
    • 2014-07-14
    • 2012-09-23
    • 1970-01-01
    • 2013-10-25
    相关资源
    最近更新 更多