Я получаю список 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));
}
}
}
Любые идеи о достижении этой цели было бы здорово, спасибо заранее.
Вы, кажется, смешиваете параметры sql и объекты C#. Значение параметра будет получено из CheckOpenTimesheets [i] .Value. В вашей строке это, вероятно, будет просто @startdate. –
woops, не хотел этого делать. Обновлено мое сообщение. Благодаря! – pfinferno
Это выглядит корректно. Есть ли еще проблема? –