C# 根据中继器控制中的复选框选择更新数据库

C# 根据中继器控制中的复选框选择更新数据库,c#,asp.net,visual-studio,checkbox,C#,Asp.net,Visual Studio,Checkbox,在VisualStudio中,我有一个中继器。这个功能很好。它有复选框和标签。如果有人选中了中继器中的复选框,我希望单击我的按钮,并根据选中和未选中的内容更新我的数据库 “我的代码”当前选择所有字段并更新数据库中的所有字段(所有行都设置为visible=0)。我只希望复选框可见=0。我需要一个WHERE语句,以某种方式只能看到选中的字段,但我不知道如何做到这一点 这是我的中继器: <asp:Repeater ID="Repeater1" runat="server">

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

“我的代码”当前选择所有字段并更新数据库中的所有字段(所有行都设置为visible=0)。我只希望复选框可见=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>

您的问题在于SQL。不带WHERE的更新将应用于表中的所有行。我猜测您的表和数据结构,但您的解决方案可能更像这样:

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