我们目前正在编制学生信息系统。到目前为止我们所拥有的是一个复选框列表,其中包含所选学生注册的课程的所有模块。这些值都存储在数据库中。我们要做的是根据他们当前正在研究的模块,根据数据库中存储的内容,选择/勾选复选框列表中的List项目值。
这是我们的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语句似乎存在问题。
我们测试了上面代码底部附近的else子句,&#34; li.Selected = true&#34;确保代码正确地通过foreach语句运行。复选框列表中的所有项目都显示为勾选。因此,这使我们相信FOR循环中的IF语句肯定存在问题。
对此有任何想法将不胜感激。 感谢
答案 0 :(得分:0)
在内部循环中,您将ListItem
变量的值与数组中的每个元素进行比较。因此,如果第一个元素匹配,则该值将被与第二个元素的比较值覆盖,依此类推。相反,您可以尝试检查该特定ListItem
的值是否与从DB检索的字符串列表中的任何值匹配。你可以这样做:
if(listOfStrings.Contains(li.Value.ToString()))
{
li.Selected = true;
}
请注意,您无需将listOfStrings
变量转换为数组,Contains
方法适用于Lists
。
答案 1 :(得分:0)
你不需要运行两个for循环。您可以遍历数组并检查是否存在与特定索引上的数组元素具有相同值的列表项。
试试这个。
for (int x = 0; x < arrayOfStrings.Length; x++)
{
ListItem listItemtoSelect = this.CbOptional.Items.FindByValue(arrayOfStrings[x]);
if (listItemtoSelect != null)
{
listItemtoSelect.Selected = true;
}
}
答案 2 :(得分:0)
由于List<string>
将仅与文本进行比较,因此您应使用此
repace li.Value with li.Text
for (int x = 0; x < arrayOfStrings.Length; x++)
{
if (li.Text.ToString() == arrayOfStrings[x])
{
li.Selected = true;
}
else
{
li.Selected = false;
}
}