CheckedListBox中的C#Foreach项仅获得一项

时间:2019-03-21 09:34:50

标签: c# database foreach

当我检查CheckedListBox中的多个项目时,它只会得到最后选择的项目的Selected.Value,并将其使用foreach的次数。

额外内容:这是一个可以在特定日期进行锻炼的应用程序,因此它是锻炼应用程序,但是当您在CheckedListBox中选择多个锻炼时,它只会添加最后选择的值的项目。

因此选择3个不同的项(pushups,pullup,situps)-> 3个仰卧起坐添加了所有相同的值

将练习添加到其他正常 ListBox的代码:

        query = "INSERT INTO Xercise_Day (DayId, ExerciseId) " +
               "VALUES(@DayId, @ExerciseId)";

        foreach (CheckedListBox exercise in clbXcercises.CheckedItems)
        {
            using (connection = new SqlConnection(connectionString))
            using (SqlCommand command = new SqlCommand(query, connection))
            using (SqlDataAdapter adapter = new SqlDataAdapter(command))
            {
                command.Parameters.AddWithValue("@DayId", scrollBarDays.Value);
                command.Parameters.AddWithValue("@ExerciseId", clbXcercises.SelectedValue);

                DataTable data = new DataTable();
                adapter.Fill(data);

                lsBoxDailyX.DataSource = data;
                lsBoxDailyX.DisplayMember = "Naam";              
            }

            DailyX();
        }

        for(int i = 0; i < clbXcercises.Items.Count; i++)
        {
            clbXcercises.SetItemChecked(i, false);
        }

1 个答案:

答案 0 :(得分:0)

如评论中所述,引用exercise而不是clbXcercises以获得所选值。代码变为:

foreach (object exercise in clbXcercises.CheckedItems)
{
    using (connection = new SqlConnection(connectionString))
    using (SqlCommand command = new SqlCommand(query, connection))
    using (SqlDataAdapter adapter = new SqlDataAdapter(command))
    {
        command.Parameters.AddWithValue("@DayId", scrollBarDays.Value);
        command.Parameters.AddWithValue("@ExerciseId", exercise.ToString());

        DataTable data = new DataTable();
        adapter.Fill(data);

        lsBoxDailyX.DataSource = data;
        lsBoxDailyX.DisplayMember = "Naam";              
    }

    DailyX();
}