C# 数组以设置复选框并将结果保存到SQL

C# 数组以设置复选框并将结果保存到SQL,c#,sql,arrays,winforms,checkbox,C#,Sql,Arrays,Winforms,Checkbox,我继续我之前的问题,因为我从未得到完整的回答 基本上,我已将语法更改为以下内容,但有两个问题: 这些复选框实际上不会出现。 在saveOrderBtn_Click循环中,我收到错误消息,当前上下文中不存在名称“MyBox”。这在if语句行上。 我不能使用Controls.AddmyCheckBox;与执行更新时一样,这会根据在循环中创建的最后一个复选框更新SQL中的所有内容-它不计算每个复选框 我还在学C。非常感谢你的高级 更新代码: public partial class SelectUse

我继续我之前的问题,因为我从未得到完整的回答

基本上,我已将语法更改为以下内容,但有两个问题:

这些复选框实际上不会出现。 在saveOrderBtn_Click循环中,我收到错误消息,当前上下文中不存在名称“MyBox”。这在if语句行上。 我不能使用Controls.AddmyCheckBox;与执行更新时一样,这会根据在循环中创建的最后一个复选框更新SQL中的所有内容-它不计算每个复选框

我还在学C。非常感谢你的高级

更新代码:

public partial class SelectUsers : Form { 

// DECLARE THE myCheckBox
private CheckBox myCheckBox;

public SelectUsers()
{
    InitializeComponent();
}

private void SelectUsers_Load(object sender, EventArgs e)
{
    DataSet ds = myconnection.runSelect(new DataSet(), "THE SELECT");

    int xAxisCheckbox = 40;
    int yAxisCheckbox = 50;

    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
        // CHANGED List<CheckBox> myBoxes LINE
        List<CheckBox> myBoxes = new List<CheckBox>();

        myCheckBox = new CheckBox();
        myCheckBox.Location = new Point(xAxisCheckbox, yAxisCheckbox);
        myCheckBox.Size = new Size(120, 20);
        myCheckBox.Text = ds.Tables[0].Rows[i]["FullName"].ToString();
        myCheckBox.Checked = (bool)ds.Tables[0].Rows[i]["InOperation"];
        yAxisCheckbox = yAxisCheckbox + 80;

        // THIS SHOULD ADD/RENDER EACH CHECKBOX, BUT IT DOESN'T
        myBoxes.Add(myCheckBox);
    }
}

private void saveBtn_Click(object sender, EventArgs e)
{
    DataSet ds = myconnection.runSelect(new DataSet(), "THE SELECT");

    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
        userID = (int)ds.Tables[0].Rows[i]["UserID"];
        if (myBoxes[i].Checked)
        {
            myconnection.runUpdate("UPDATE Users SET InOperation = 1, OperationOrder = CASE WHEN OperationOrder = 1 THEN 1 ELSE CASE WHEN InOperation=1 THEN OperationOrder ELSE (SELECT COUNT(*)+1 FROM Users WHERE InOperation=1 AND OperationOrder > 0) END END WHERE UserID=" + userID);
            myconnection.runUpdate("UPDATE Users SET OperationOrder = CASE WHEN OperationOrder = 0 THEN (SELECT COUNT(*) FROM Users WHERE InOperation=1) ELSE OperationOrder END WHERE InOperation=1");
        }
        else
        {
            myconnection.runUpdate("UPDATE Users SET InOperation = 0, OperationOrder = 0 WHERE UserID=" + userID);
            myconnection.runUpdate("UPDATE Users SET OperationOrder = CASE WHEN OperationOrder -1 = 0 THEN (SELECT COUNT(*) FROM Users WHERE InOperation=1) ELSE OperationOrder -1 END WHERE InOperation=1");
        }
    }
}
}

阅读编程书籍后,我发现您不会创建这样的数组,它是通过以下方式完成的:

// Global
CheckBox[] myCheckBox;
DataSet ds;

private void SelectUsers_Load(object sender, EventArgs e) {

    ds = myconnection.runSelect(new DataSet(), "THE SELECT");

    int xAxisCheckbox = 40;
    int yAxisCheckbox = 50;

    // Create the CheckBox array (amount based on number of rows)
    myBoxes = new CheckBox[ds.Tables[0].Rows.Count];

    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
        // Create a new Checkbox
        myCheckBox[i] = new CheckBox();

        myCheckBox.Location = new Point(xAxisCheckbox, yAxisCheckbox);
        myCheckBox.Size = new Size(120, 20);
        myCheckBox.Text = ds.Tables[0].Rows[i]["FullName"].ToString();
        myCheckBox.Checked = (bool)ds.Tables[0].Rows[i]["InOperation"];
        yAxisCheckbox = yAxisCheckbox + 80;

        // Add the Checkbox
        Controls.Add(myCheckBox[i]);
    }
}

private void saveBtn_Click(object sender, EventArgs e) {
    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
        userID = (int)ds.Tables[0].Rows[i]["UserID"];

        if (myBoxes[i].Checked)
        {
            myconnection.runUpdate("UPDATE Users SET InOperation = 1, OperationOrder = CASE WHEN OperationOrder = 1 THEN 1 ELSE CASE WHEN InOperation=1 THEN OperationOrder ELSE (SELECT COUNT(*)+1 FROM Users WHERE InOperation=1 AND OperationOrder > 0) END END WHERE UserID=" + userID);
            myconnection.runUpdate("UPDATE Users SET OperationOrder = CASE WHEN OperationOrder = 0 THEN (SELECT COUNT(*) FROM Users WHERE InOperation=1) ELSE OperationOrder END WHERE InOperation=1");
        }
        else
        {
            myconnection.runUpdate("UPDATE Users SET InOperation = 0, OperationOrder = 0 WHERE UserID=" + userID);
            myconnection.runUpdate("UPDATE Users SET OperationOrder = CASE WHEN OperationOrder -1 = 0 THEN (SELECT COUNT(*) FROM Users WHERE InOperation=1) ELSE OperationOrder -1 END WHERE InOperation=1");
        }
    }
}

您在循环外声明MyBox将使其成为一个复选框,因此在您不断重新定义相同的复选框时,MyBox的所有位置都有完全相同的复选框。使用MyBox将项目呈现到页面的代码在哪里?您的保存还取决于数据库在加载和保存之间没有变化。@EricH感谢您的回复。那么,更新后的代码示例是否可以声明MyBox(见上文)?我发布的代码是使复选框工作的一切,尽管它显然不工作,所以我想我需要更多的代码来呈现复选框,而不仅仅是mybox.AddmyCheckBox;?请给我一个例子,让它们显示出来好吗?而且数据库不太可能在“加载”和“保存”按钮之间更改。谢谢