试图比较一个复选框列表的值与一个数组列表的值

本文关键字:一个 列表 数组 比较 复选框 | 更新日期: 2023-09-27 17:52:17

我们目前正在编写一个学生信息系统。到目前为止,我们有一个复选框列表,其中包含所选学生注册的课程的所有模块。这些值都存储在数据库中。我们要做的是在复选框列表中选择/打勾的列表项值基于他们目前正在学习的模块,基于存储在数据库中的内容。

下面是我们的c#代码:
    string connectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    SqlConnection myConnection = new SqlConnection(connectionString);
    myConnection.Open();
    string com5 = "SELECT ModuleID FROM StudentModules WHERE StudentID = @StudentID";
    SqlCommand myCommand5 = new SqlCommand(com5, myConnection);
    StudentIDLabel.Text = SearchText.Text;
    int StudentIDint = Convert.ToInt32(StudentIDLabel.Text);
    myCommand5.Parameters.AddWithValue("@StudentID", StudentIDint);
    string compareModules = myCommand5.ExecuteScalar().ToString();

    var listOfStrings = new List<string>();
    SqlDataReader reader = myCommand5.ExecuteReader();
    while (reader.Read())
    {
        String currentValue = reader.ToString();
        listOfStrings.Add(currentValue);
    }
    string[] arrayOfStrings = listOfStrings.ToArray();
    foreach (ListItem li in this.CbOptional.Items)
    {
        for (int x = 0; x < arrayOfStrings.Length; x++)
        {
            if (li.Value.ToString() == arrayOfStrings[x])
            {
                li.Selected = true;
            }
            else
            {
                li.Selected = false;
            }
        }
    }

从我们可以看到,当比较复选框列表中的值和数组中的值时,IF语句似乎有一个问题。

我们在上面代码的底部附近用"li"测试else子句。Selected = true",以确保代码正确地通过foreach语句运行。复选框列表中的所有项显示为打勾。因此,这使我们相信FOR循环中的IF语句肯定有问题。

如有任何意见,我将不胜感激。由于

试图比较一个复选框列表的值与一个数组列表的值

你不需要运行两个for循环。你可以遍历数组,并检查是否有列表项与特定索引上的数组元素具有相同的值。

试试这个。

        for (int x = 0; x < arrayOfStrings.Length; x++)
        {
           ListItem listItemtoSelect = this.CbOptional.Items.FindByValue(arrayOfStrings[x]);
           if (listItemtoSelect != null)
             {
              listItemtoSelect.Selected = true;
             }
        }

由于List<string>将只与文本而不是值进行比较,因此您应该使用

repace李。Value with li。文本

  for (int x = 0; x < arrayOfStrings.Length; x++)
                {
                    if (li.Text.ToString() == arrayOfStrings[x])
                    {
                        li.Selected = true;
                    }
                    else
                    {
                        li.Selected = false;
                    }
                }

在内部循环中,您将ListItem变量的值与数组中的每个元素进行比较。因此,如果第一个元素匹配,则该值将被与第二个元素比较的值覆盖,依此类推。相反,您可以尝试检查该特定ListItem的值是否与从DB检索的字符串列表中的任何值相匹配。你可以这样做:

if(listOfStrings.Contains(li.Value.ToString()))
 {
  li.Selected = true;
 }

注意,您不需要将listOfStrings变量转换为数组,Contains方法适用于Lists