根据Repeater控件中的复选框选择更新数据库

时间:2015-11-16 03:34:56

标签: c# asp.net visual-studio checkbox

在Visual Studio中,我有一个Repeater。这个功能很好。它有复选框和标签。如果有人检查了Repeater中的复选框,我希望单击按钮并根据未检查的内容更新我的数据库

我的代码当前选择所有字段并更新数据库中的所有字段(所有行都设置为visible = 0)。我只想要CHECKED框来获得Visible = 0.我需要一个 WHERE语句,只能看到已检查的字段,但我不知道如何做到这一点。

这是我的中继器:

        <asp:Repeater ID="Repeater1" runat="server">
   <ItemTemplate>
     <table>
        <tr>
            <td>
 <asp:CheckBoxList ID="CheckBoxList1" runat="server">
       <asp:ListItem></asp:ListItem></asp:CheckBoxList>
            </td>
              <td> <asp:Label ID="lblTest" runat="server" Text='<%# Eval("MyColumn") %>'></asp:Label>
            </td>
     </table>
   </ItemTemplate>
</asp:Repeater>

这是我的按钮:

protected void ButtonSubmit_Click(object sender, EventArgs e)
    {

        using (SqlConnection sqlConn2 = new SqlConnection(ConfigurationManager.ConnectionStrings["Events2"].ConnectionString))
        {
            sqlConn2.Open();

            using (SqlCommand sqlCmd2 = new SqlCommand())
            {
                sqlCmd2.Connection = sqlConn2;
                sqlCmd2.CommandType = System.Data.CommandType.Text;

                foreach (RepeaterItem aItem in Repeater1.Items)
                {
                    CheckBoxList CheckBoxList1 = (CheckBoxList)aItem.FindControl("CheckBoxList1");
                    foreach (ListItem listItem in CheckBoxList1.Items)
                    {
                        if (listItem.Selected == true)
                        {
                        sqlCmd2.CommandText = string.Format("UPDATE FormField SET Visible = 0");
                        sqlCmd2.ExecuteNonQuery();
                        }
                        else
                        {
                            //do something else
                        }
                    }


                } sqlConn2.Close();

            }

        }
    }

1 个答案:

答案 0 :(得分:0)

您的问题出在您的SQL中。没有WHERE的UPDATE将适用于表中的所有行。我猜你的表和数据结构,但你的解决方案可能看起来更像这样:

CheckBoxList CheckBoxList1 = (CheckBoxList)aItem.FindControl("CheckBoxList1");

foreach (ListItem listItem in CheckBoxList1.Items)
{
  if (listItem.Selected)
  {
    sqlCmd2.CommandText = string.Format("UPDATE FormField SET Visible = 0 WHERE MyField = '{0}';", listItem.Value);
    sqlCmd2.ExecuteNonQuery();
  }
  else
  {
    //do something else
  }
}