我是WPF的新手。我正在尝试从数据库加载值以填充CheckedListBox
。根据条件,在checkedlistbox中加载时,必须设置一些项目以进行检查。
这该怎么做?我已尝试过以下代码,项目已加载到CheckedListBox
,但未检查。
下面是加载到检查列表框的值
public void fillcheck()
{
con = new SqlConnection(connectionstring);
con.Open();
string comboquery = "SELECT [Machine] FROM Department Where active='True'";
SqlCommand cmd = new SqlCommand(comboquery, con);
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
string fil1 = rdr.GetString(0);
Checkedlistbox1.Items.Add(fil1);
}
rdr.Close();
}
int departmentID=60//for just refer
Object[] jobs = CheckedlistBox1.Items.Cast<Object>().ToArray();
foreach (Object obj in jobs)
{
string query = "SELECT [Machine] FROM Department Where ID='" + departmentID+ "'";
SqlCommand cmd = new SqlCommand(query, con);
SqlDataReader rdr = cmd.ExecuteReader();
while(rdr.Read())
{
string mac = rdr.GetString(0);//Here i get two values(XRAY,CT)but finally shown CT only be checked,so how to do both checked
if (mac == obj.ToString())
{
int indexx = CheckedlistBox1.Items.IndexOf(mac);
if (indexx >= 0)
{
CheckedlistBox1.SetItemChecked(indexx, true);
}
}
}
rdr.Close();
}
答案 0 :(得分:2)
您需要将SqlDataReader rdr
内容传输到DataTable
。这将帮助您获得包含多行的DataTable对象,如您所述。
现在进行下一步,您可以在foreach
对象上应用DataTable
来迭代其所有行,如下所示:
foreach(DataRow dr in dt.Rows)
{
if(yourCondition)
{
//set isChecked = true for the checkbox.
}
}
更新:
尝试像这样修改while
循环:
while (rdr.Read())
{
string mac = rdr.GetString(0);
ListItem li = new ListItem();
li.Value = "yourBindedValue";// some value from database column
li.Text = "yourBindedText";// use mac if its text.
int index = Checkedlistbox1.Items.IndexOf(li);
if (index >= 0)
{
Checkedlistbox1.SetItemChecked(index, true);
}
}
我测试了这个并且它有效。您只需要传递要在Text
对象中找到的CheckBoxListItem的Value
和li
,并且可以获取索引(如果存在)。确保您传递两个属性。
答案 1 :(得分:0)
你应该使用代码 -
foreach (int indexChecked in chlstBox.Items)
而不是
foreach (int indexChecked in chlstBox.CheckedIndices)
一开始你有0个选定的项目,这就是为什么你的外部for循环不起作用..
编辑 -
基本逻辑也不正确。 你应该遍历数据集,找到checkboxlist中的字符串,然后检查它。因此,不需要外部foreach循环。另外,请确保使用正确的checkboxlist变量。在for循环中,您使用 chlstBox 在搜索时,您正在使用 Checkedlistbox1 ....