0

所以,我有一个 checkListBox,我试图获取复选框的值成员。目前,我可以获得一项的 selectedValue 。如果检查了多个项目,我会为每个项目获得相同的 selectedValue。

盒子是这样填充的......

SqlConnection cn = new SqlConnection(Properties.Settings.Default.cs);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand("usp_getCustomers, cn);
DataSet ds = new DataSet();
da.Fill(ds, "usp_getCustomers");
chkListCustomer.DataSource = ds;
chkListCustomer.DisplayMember = "usp_getCustomers.name";
chkListCustomer.ValueMember = "usp_getCustomers.id";
chkListCustomer.SelectedIndex = -1;

单击按钮,这就是我要尝试并获取所选值的操作。它为我提供了一个项目的正确 ID,但如果检查了多个项目,它会为所有项目返回相同的 ID。

foreach (int indexChecked in chkListCustomer.CheckedIndices)
{
    MessageBox.Show("Index#: " + indexChecked.ToString() + ", is checked. Checked state is:" + chkListCustomer.SelectedValue.ToString()  + ".");   
}

示例输出是:

"Index#: 1, is checked. Checked state is:984"  
"Index#: 2, is checked. Checked state is:984"  
"Index#: 3, is checked. Checked state is:984" 

谢谢您的帮助!

4

4 回答 4

1

如果您实际上不需要索引,则可以简单地使用CheckedItems属性

foreach (DataRowView checkedItem in chkListCustomer.CheckedItems)
{
    MessageBox.Show("Checked item: "
        + checkedItem[chkListCustomer.ValueMember].ToString()
        + ".");
}
于 2011-07-19T19:01:07.357 回答
1

尝试这个:

foreach (int indexChecked in chkListCustomer.CheckedIndices)
{
    MessageBox.Show("Index#: " + indexChecked.ToString() +
        ", is checked. Checked state is:" +
        chkListCustomer.Items[indexChecked].ToString()  + ".");   
}
于 2011-07-19T18:58:15.503 回答
0

你应该使用

chkListCustomer.GetItemCheckState(indexChecked).ToString()

代替

chkListCustomer.SelectedValue.ToString()

MSDN 上有关CheckedIndicesCheckedListBox Class的更多信息。

您也可以遍历该.Items属性:

foreach(object itemChecked in chkListCustomer.CheckedItems) {
    // Use the IndexOf method to get the index of an item.
    MessageBox.Show("Item with title: \"" + itemChecked.ToString() + 
                    "\", is checked. Checked state is: " + 
        chkListCustomer.GetItemCheckState(chkListCustomer.Items.IndexOf(itemChecked)).ToString() + ".");
    MessageBox.Show(itemChecked.ToString())
}
于 2011-07-19T19:00:08.303 回答
0

修改了来自 Ahmad Mageed的这篇文章的 SO 上的一段代码。这给了我每个

    foreach (object itemChecked in chkListPatients.CheckedItems) 
    {
        DataRow row = (itemChecked as DataRowView).Row;
        string id = row[0].ToString();
        MessageBox.Show(id);
    }
于 2011-07-21T14:27:00.730 回答