我如何获得一个多项目复选框的选定值,c#, winforms
本文关键字:复选框 winforms 项目 何获得 一个 | 更新日期: 2023-09-27 18:02:29
所以,我有一个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"
谢谢你的帮助!
试试这个:
foreach (int indexChecked in chkListCustomer.CheckedIndices)
{
MessageBox.Show("Index#: " + indexChecked.ToString() +
", is checked. Checked state is:" +
chkListCustomer.Items[indexChecked].ToString() + ".");
}
如果您实际上不需要索引,您可以简单地使用CheckedItems
属性:
foreach (DataRowView checkedItem in chkListCustomer.CheckedItems)
{
MessageBox.Show("Checked item: "
+ checkedItem[chkListCustomer.ValueMember].ToString()
+ ".");
}
你应该使用
chkListCustomer.GetItemCheckState(indexChecked).ToString()
代替
chkListCustomer.SelectedValue.ToString()
更多关于CheckedIndices和CheckedListBox类的MSDN信息
也可以遍历.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())
}
修改了Ahmad Mageed在SO上发现的一段代码。这给了我每个
foreach (object itemChecked in chkListPatients.CheckedItems)
{
DataRow row = (itemChecked as DataRowView).Row;
string id = row[0].ToString();
MessageBox.Show(id);
}