根据Repeater控件中的复选框选择更新数据库
本文关键字:选择 更新 数据库 复选框 Repeater 控件 根据 | 更新日期: 2023-09-27 18:22:05
在Visual Studio中,我有一个Repeater。这个功能很好。它有复选框和标签。如果有人选中Repeater中的复选框,我希望单击我的按钮,并根据选中和未选中的内容更新我的数据库。
我的代码当前选择所有字段并更新数据库中的所有字段(所有行都设置为visible=0)。我只希望选中的框变为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();
}
}
}
您的问题出在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
}
}