2016-01-05 8 views
0

Я получаю список DateTimes и хранить их в CheckBoxList с этим битом кода:Обновление нескольких записей данных в SQL

<anthem:CheckBox ID="chkAll" runat="server" OnCheckedchanged="chkAll_CheckedChanged" Text="Select/Deselect All" AutoPostBack="true" 
     style="margin-left: 128px" > 
    </anthem:CheckBox> 
    <anthem:CheckBoxList ID="CheckOpenTimesheets" runat="server" OnSelectedIndexChanged="checkbox_Selected" AutoPostBack="true" 
     style="margin-left: 128px" > 
    </anthem:CheckBoxList> 

Вот соответствующий код позади:

  List<ListItem> toBeRemoved = new List<ListItem>(); 

      for (int i = 1; i < CheckOpenTimesheets.Items.Count; i++) 
      { 
       toBeRemoved.Add(CheckOpenTimesheets.Items[i]); 
      } 
      for (int i = 0; i < toBeRemoved.Count; i++) 
      { 
       CheckOpenTimesheets.Items.Remove(toBeRemoved[i]); 
      } 

      String sql = "SELECT StartDate FROM Periods WHERE User_ID = @userid AND (PeriodStatus_ID = 1 OR PeriodStatus_ID = 2) ORDER BY StartDate DESC"; 
      command.CommandText = sql; 
      command.Parameters.Add(new SqlParameter("userid", ddlActingAs.SelectedValue.ToString())); 

      SqlDataReader reader = command.ExecuteReader(); 
      while (reader.Read()) 
      { 

       ListItem item = new ListItem(); 
       item.Text += reader.GetDateTime(0).ToString("MM/dd/yyyy") + " is open"; 
       item.Value = reader["StartDate"].ToString(); 

       CheckOpenTimesheets.Items.Add(item); 

      } 
      CheckOpenTimesheets.UpdateAfterCallBack = true; 

      reader.Close(); 

//The functions below are for selecting/deselecting the items in the checklistbox 
protected void chkAll_CheckedChanged(object sender, EventArgs e) 
{ 
    foreach (ListItem item in CheckOpenTimesheets.Items) 
    { 
     item.Selected = chkAll.Checked; 
    } 
} 

protected void checkbox_Selected(object sender, EventArgs e) 
{ 
    chkAll.CheckedChanged -= chkAll_CheckedChanged; 

    CheckBoxList checkOpenTimesheets = (CheckBoxList)sender; 
    if (allItemsCheckedInCheckBoxList(checkOpenTimesheets)) 
    { 
     chkAll.Checked = true; 
    } 
    else if (allItemsUnCheckedInCheckBoxList(checkOpenTimesheets)) 
    { 
     chkAll.Checked = false; 
    } 

    chkAll.CheckedChanged += chkAll_CheckedChanged; 
} 

private bool allItemsCheckedInCheckBoxList(CheckBoxList checkBoxList) 
{ 
    bool allItemsChecked = true; 

    foreach (ListItem item in checkBoxList.Items) 
    { 
     allItemsChecked = item.Selected; 

     if (!allItemsChecked) 
      break; 
    } 

    return allItemsChecked; 
} 

private bool allItemsUnCheckedInCheckBoxList(CheckBoxList checkBoxList) 
{ 
    bool allItemsUnChecked = false; 

    foreach (ListItem item in checkBoxList.Items) 
    { 
     allItemsUnChecked = item.Selected; 

     if (allItemsUnChecked) 
      break; 
    } 

    return allItemsUnChecked; 
} 

Что Я пытаюсь сделать это, когда нажата кнопка, которую я нажимаю на странице, она будет проходить через checkboxlist, и каждый проверенный элемент обновит PeriodStatus_ID до 5 для каждого из этих элементов таблицы SQL.

Функция для нажатия кнопки здесь (не уверен, как идти об этом):

protected void SubmitAll_Click(object sender, EventArgs e) 
{ 
    foreach (ListItem item in CheckOpenTimesheets.Items) 
    { 
     SqlCommand command = new SqlCommand(); 
     command.Connection = gConn; 
     if (item.Selected == true) 
     { 
      String sql = "UPDATE Periods SET PeriodStatus_ID=5 WHERE User_ID = @userid AND StartDate = @startdate"; 
      command.CommandText = sql; 
      command.Parameters.Add(new SqlParameter("userid", ddlActingAs.SelectedValue.ToString())); 
      command.Parameters.Add(new SqlParameter("startdate", item.Value)); 
     } 
    } 
} 

Любые идеи о достижении этой цели было бы здорово, спасибо заранее.

+1

Вы, кажется, смешиваете параметры sql и объекты C#. Значение параметра будет получено из CheckOpenTimesheets [i] .Value. В вашей строке это, вероятно, будет просто @startdate. –

+0

woops, не хотел этого делать. Обновлено мое сообщение. Благодаря! – pfinferno

+0

Это выглядит корректно. Есть ли еще проблема? –

ответ

1

Вы обновили свой код, поэтому я обновил свою версию, но я передумал, как вы хотите ее структурировать. Вы также не указали инструкцию ExecuteNonQuery, которая составляет the way, чтобы отправить команду Update.

+0

Спасибо! Мне дали некоторые ошибки, и я думал, что это связано с частью .executenonquery, но это не так. – pfinferno

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