Как я могу получить выбранное значение из нескольких элементов контрольного списка, C#, Winforms
Итак, у меня есть 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;
По нажатию кнопки, это то, что я делаю, чтобы ПОПРОБОВАТЬ и получить выбранные значения. Он дает мне правильный идентификатор для одного элемента, но если проверено несколько элементов, он возвращает один и тот же идентификатор для всех.
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 ответа
Изменил кусок кода, найденный на SO в этом сообщении от Ахмада Магида. Это дает мне каждый
foreach (object itemChecked in chkListPatients.CheckedItems)
{
DataRow row = (itemChecked as DataRowView).Row;
string id = row[0].ToString();
MessageBox.Show(id);
}
Попробуй это:
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()
Больше информации на MSDN о CheckedIndices и CheckedListBox 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())
}