简体   繁体   English

SQL 服务器中的 C# CheckBoxList 更新

[英]C# CheckBoxList update in SQL Server

Please inspect my C# code below and let me know where I am going wrong.请检查我下面的 C# 代码,让我知道我哪里出错了。 Here is what I am experiencing:这是我正在经历的:

1.) If I empty the SendReport column in SQL Server and load the page, the second row of the SendReport automatically gets populated with a 1. 1.) 如果我清空 SQL 服务器中的SendReport列并加载页面, SendReport的第二行会自动填充 1。

2.) I can place a checkmark, click the button and the SendReport values successfully populate in SQL Server. 2.) 我可以打勾,单击按钮, SendReport值成功填充到 SQL 服务器中。 However, if I uncheck any of them and click the button, none of the values change from 1 to 0. Please help!但是,如果我取消选中其中任何一个并单击按钮,则所有值都不会从 1 变为 0。请帮忙!

$<asp:CheckBoxList ID="CheckBoxList1" runat="server">
</asp:CheckBoxList>
<br />
<asp:Button ID="Button1" runat="server" Text="Save Changes" OnClick="Button1_Click" />
<br />


BACKPAGE:
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        BindCheckBoxList();
    }
}

//  Setting up the ConnectionString
public string GetConnectionString()
{
    return System.Configuration.ConfigurationManager.ConnectionStrings["IPdataConnectionString"].ConnectionString;
}

//  Binding the CheckBoxList with Data
private void BindCheckBoxList()
{
  DataTable dt = new DataTable();
  SqlConnection connection = new SqlConnection(GetConnectionString());
  try
  {
    connection.Open();
    string sqlStatement = "SELECT Partner, ID, SendReport FROM Rorts";
    SqlCommand sqlCmd = new SqlCommand(sqlStatement, connection);
    SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);

    sqlDa.Fill(dt);
    if (dt.Rows.Count > 0)
    {
      CheckBoxList1.DataSource = dt;
      CheckBoxList1.DataTextField = "Partner"; // the items to be displayed in the list items
      CheckBoxList1.DataValueField = "SendReport"; // the id of the items displayed
      CheckBoxList1.DataBind();

      //Setting the Selected Items in the ChecBoxList based from the value in the database
      //to do this, lets iterate to each items in the list
      for (int i = 0; i < dt.Rows.Count; i++)
      {
        if (!string.IsNullOrEmpty(dt.Rows[i]["SendReport"].ToString()))
        {
          CheckBoxList1.Items[i].Selected = Convert.ToBoolean(dt.Rows[i]["SendReport"]);
        }
      }
    }

  }
  catch (System.Data.SqlClient.SqlException ex)
  {
    string msg = "Fetch Error:";
    msg += ex.Message;
    throw new Exception(msg);
  }
  finally
  {
    connection.Close();
  }
}

//  Creating the Method for Saving the CheckBoxList Selected Items to the database
private void Update(string name, bool SendReport)
{
  SqlConnection connection = new SqlConnection(GetConnectionString());
  SqlCommand cmd;
  string sqlStatement = string.Empty;
    try
    {
      // open the Sql connection
      connection.Open();
      sqlStatement = "UPDATE Rorts SET SendReport = @SendReport WHERE Partner = @Partner";
      cmd = new SqlCommand(sqlStatement, connection);
      cmd.Parameters.AddWithValue("@Partner", name);
      cmd.Parameters.AddWithValue("@SendReport", SendReport);
      cmd.CommandType = CommandType.Text;
      cmd.ExecuteNonQuery();

    }
    catch (System.Data.SqlClient.SqlException ex)
    {
      string msg = "Insert/Update Error:";
      msg += ex.Message;
      throw new Exception(msg);
    }
    finally
    {
      // close the Sql Connection
      connection.Close();
    }
  }

//  Calling the Method for Saving the state of  CheckBoxList  selected items
protected void Button1_Click(object sender, EventArgs e)
{
    string PartnerName = string.Empty;

  for (int i = 0; i < CheckBoxList1.Items.Count; i++)
  {
    if (CheckBoxList1.Items[i].Selected)
    {
        PartnerName = CheckBoxList1.Items[i].Text;
        Update(PartnerName, CheckBoxList1.Items[i].Selected);
    }
  }
  //ReBind the List to retain the selected items on postbacks
  BindCheckBoxList();
}

It looks like the issue is due to the if block below from the Button1 click event handler.看起来问题是由于来自 Button1 单击事件处理程序的 if 块。 The result is that only the check boxes that are checked have the values persisted to the database.结果是只有被选中的复选框才会将值保存到数据库中。

        if (CheckBoxList1.Items[i].Selected)
        {
            PartnerName = CheckBoxList1.Items[i].Text;
            Update(PartnerName, CheckBoxList1.Items[i].Selected);
        }

You can just remove the if statement and persist all of the values or add logic to only persist those that have changed.您可以删除 if 语句并保留所有值或添加逻辑以仅保留已更改的值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM