试图比较一个复选框列表的值与一个数组列表的值
本文关键字:一个 列表 数组 比较 复选框 | 更新日期: 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
。