Gridview获取Checkbox.Checked值

zxc*_*zxc 17 c# asp.net visual-studio-2010

我有一个GridView,其中有10列由CheckBoxes填充.但是没有使用FindControl()是否有办法CheckBox.Checked通过使用循环获取值?

现行代码:

if (e.CommandName == "updaterow")
{
     int index = Convert.ToInt32(e.CommandArgument);
     GridViewRow selectedRow = GridView1.Rows[index];
     // TableCell BranchCode = selectedRow.Cells[0];
     CheckBox cb101 = (CheckBox)selectedRow.FindControl("cb101");
     CheckBox cb102 = (CheckBox)selectedRow.FindControl("cb102");
     //...and so on
}  
Run Code Online (Sandbox Code Playgroud)

ASPX代码:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowCommand="GridView1_RowCommand">
    <Columns>
        <asp:TemplateField HeaderText="101">
            <ItemTemplate>
                <asp:CheckBox runat="server" id="cb101" AutoPostBack="false" Checked='<%# Eval("101").ToString()=="1" ? true : false %>' Enabled='<%#(String.IsNullOrEmpty(Eval("101").ToString()) ? false: true) %>'/>
            </ItemTemplate>
        </asp:TemplateField>
        ....and so on
        <asp:ButtonField ButtonType="Button" CommandName="updaterow" Text="Update"/>
    </Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

Man*_*rma 20

试试这个,

使用foreach循环:

foreach (GridViewRow row in GridView1.Rows)
{
     CheckBox chk = row.Cells[0].Controls[0] as CheckBox;
     if (chk != null && chk.Checked)
     {
       // ...
     }
}
Run Code Online (Sandbox Code Playgroud)

OnRowCommand事件中使用它并获取CheckBox值.

GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer);
int requisitionId = Convert.ToInt32(e.CommandArgument);
CheckBox cbox = (CheckBox)row.Cells[3].Controls[0];
Run Code Online (Sandbox Code Playgroud)