2013-02-14 3 views
0

Я следую из предыдущего вопроса, так как у меня не было полного ответа. Reference previous object created in loop to update SQLArray для установки флажка и сохранить результаты по SQL

В принципе, я изменил свой синтаксис к следующему, однако есть две проблемы, связанные с ним:

  1. Флажки на самом деле не появляются.
  2. В цикле saveOrderBtn_Click появляется сообщение об ошибке «Имя« myBoxes »не существует в текущем контексте». Это находится в строке оператора if.

Я не могу использовать Controls.Add (myCheckBox); как при обновлении, это обновляет все в 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"); 
     } 
    } 
} 
} 
+0

Ваше заявление о myBoxes вне цикл сделает так, чтобы у вас был тот же самый флажок во всех позициях myBoxes (поскольку вы продолжаете переопределять один и тот же флажок). Где код, который использует myBoxes для отображения элементов на странице? Ваше сохранение также зависит от того, что база данных не изменяется между загрузкой и сохранением. –

+0

@EricH Спасибо за ответ. Итак, обновленный пример кода для объявления myBoxes (см. Выше)? Код, который я опубликовал, - это все, чтобы работать с флажками, хотя он явно не работает, поэтому, я думаю, мне нужно больше кода, чтобы отображать флажки, отличные от «myBoxes.Add (myCheckBox);»? Пожалуйста, у меня есть пример, чтобы отобразить их? И база данных вряд ли изменится между нажатием кнопки загрузки и сохранения. благодаря – user1779775

ответ

0

После прочтения книг по программированию, я обнаружил, что вы не создаете массив, как это, это делается следующим образом:

// 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"); 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^