Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在gridview中使用复选框?_C#_Asp.net - Fatal编程技术网

C# 如何在gridview中使用复选框?

C# 如何在gridview中使用复选框?,c#,asp.net,C#,Asp.net,我有一个asp.net表单,使用网格视图显示Oracle数据库中的用户详细信息。我甚至使用以下模板在网格视图中获得了一个复选框字段 <asp:TemplateField> <ItemTemplate> <asp:CheckBox runat="server" ID="chck"/> </ItemTemplate> </asp:TemplateField> 我希望管理员能够使用复选框选择多个条

我有一个asp.net表单,使用网格视图显示Oracle数据库中的用户详细信息。我甚至使用以下模板在网格视图中获得了一个复选框字段

    <asp:TemplateField>
    <ItemTemplate>
      <asp:CheckBox runat="server" ID="chck"/>
    </ItemTemplate>
    </asp:TemplateField>
我希望管理员能够使用复选框选择多个条目,并对其执行特定操作。对于删除操作,我尝试使用以下命令

for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            if (Convert.ToBoolean(GridView1.Rows[i].Cells[1].Value == true))
                GridView1.Rows.RemoveAt[i];
        }
但是,这显示了一个错误。显然,每行上的每个复选框都必须有自己的唯一索引。我怎么去呢?
任何形式的帮助都将不胜感激。Thanx:

您需要使用findControl在gridview行中查找控件

for (int i = 0; i < GridView1.Rows.Count; i++)
{
     CheckBox cb1 = (CheckBox)GridView1.Rows[i].FindControls("chck");
        if(cb1.Checked)
            GridView1.Rows.RemoveAt[i];
}

使用“查找控件”获取复选框:

for (int i = 0; i < GridView1.Rows.Count; i++)
   {

        CheckBox chck = (CheckBox)GridView1.Rows[i].FindControl("chck");

       if (chck  != null)
       {
         if (chck.Checked)
         {
            GridView1.Rows.RemoveAt[i];
         }
       }
  }
这是Aspx文件:

  <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    BackColor="White" BorderColor="#336699" BorderStyle="Solid" BorderWidth="1px"  
    CellPadding="0" CellSpacing="0" DataKeyNames="CategoryID" Font-Size="10"
    Font-Names="Arial" GridLines="Vertical" Width="40%">

            <Columns>            
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:CheckBox ID="chkStatus" runat="server"
                            AutoPostBack="true" OnCheckedChanged="chkStatus_OnCheckedChanged"
                            Checked='<%# Convert.ToBoolean(Eval("Approved")) %>'
                            Text='<%# Eval("Approved").ToString().Equals("True") ? " Approved " : " Not Approved " %>' />
                    </ItemTemplate>                   
                </asp:TemplateField>

                <asp:BoundField DataField="CategoryID" HeaderText="CategoryID" />                   
                <asp:BoundField DataField="CategoryName" HeaderText="CategoryName"  />
            </Columns>

    <HeaderStyle BackColor="#336699" ForeColor="White" Height="20" />

</asp:GridView>

错误是什么?以及为什么要将GridView1.Rows[i].Cells[1]值作为布尔值进行比较?你确定吗?我有添加gridview部分的复选框,谢谢。我面临的唯一问题是,如何检索选中行的主键并使用它们删除记录?您可以添加一个带有绑定到主键的值的标签,并以与复选框相同的方式获取该标签值。
protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
  {
    LoadData();
  }
}

private void LoadData()
{
  string constr = @"Server=.\SQLEXPRESS;Database=TestDB;uid=waqas;pwd=sql;";
  string query = @"SELECT CategoryID, CategoryName, Approved FROM Categories";

  SqlDataAdapter da = new SqlDataAdapter(query, constr);
  DataTable table = new DataTable();
  da.Fill(table);

  GridView1.DataSource = table;
  GridView1.DataBind();
}

public void chkStatus_OnCheckedChanged(object sender, EventArgs e)
{
    CheckBox chkStatus = (CheckBox)sender;
    GridViewRow row = (GridViewRow)chkStatus.NamingContainer;


    string cid = row.Cells[1].Text;
    bool status = chkStatus.Checked;


    string constr = @"Server=.\SQLEXPRESS;Database=TestDB;uid=waqas;pwd=sql;";
    string query = "UPDATE Categories SET Approved = @Approved WHERE CategoryID = @CategoryID";

    SqlConnection con = new SqlConnection(constr);
    SqlCommand com = new SqlCommand(query, con);


    com.Parameters.Add("@Approved", SqlDbType.Bit).Value = status;
    com.Parameters.Add("@CategoryID", SqlDbType.Int).Value = cid;


    con.Open();
    com.ExecuteNonQuery();
    con.Close();

    LoadData();
}