Как я могу получить выбранное значение из нескольких элементов контрольного списка, C #, Winforms - PullRequest
0 голосов
/ 19 июля 2011

Итак, у меня есть 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 ]

1 голос
/ 19 июля 2011

Если вам на самом деле не нужен индекс, вы можете просто использовать свойство CheckedItems :

foreach (DataRowView checkedItem in chkListCustomer.CheckedItems)
{
    MessageBox.Show("Checked item: "
        + checkedItem[chkListCustomer.ValueMember].ToString()
        + ".");
}
1 голос
/ 19 июля 2011

Попробуйте это:

foreach (int indexChecked in chkListCustomer.CheckedIndices)
{
    MessageBox.Show("Index#: " + indexChecked.ToString() +
        ", is checked. Checked state is:" +
        chkListCustomer.Items[indexChecked].ToString()  + ".");   
}
0 голосов
/ 21 июля 2011

изменил фрагмент кода, найденный на ТАК в этом посте от Ахмада Магида. Это дает мне каждый

    foreach (object itemChecked in chkListPatients.CheckedItems) 
    {
        DataRow row = (itemChecked as DataRowView).Row;
        string id = row[0].ToString();
        MessageBox.Show(id);
    }
0 голосов
/ 19 июля 2011

Вы должны использовать

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())
}
...