C# Выбор элемента (ов) CheckBoxList путем сопоставления с массивом строк

Я изо всех сил пытаюсь найти решение своей проблемы, я потратил значительное количество времени, пытаясь найти альтернативные решения безрезультатно. Любая помощь или объяснения будут с благодарностью.

У меня есть база данных SQL, в которой есть строковое поле под названием "категории", содержащее список категорий, разделенных символами ",", например, "Рефералы", "Амбулаторные"

Поэтому я хочу, чтобы этот список сравнивался с рядом элементов CheckListBoxes (ID=CategoryCBL), каждый раз, когда категория соответствует элементу CheckListBox, который необходимо выбрать.

Вот мой код:

string categories = result.GetString(12).ToString();
string[] categorie = categories.Split(',');

 //loops through all seperated categories (cat) in categorie.
 foreach(string cat in categorie)
 {
     //loops through all list checkboxes 
     for(int index = 0; index <CategoryCBL.Items.Count; index++)
     {
         //gets the listcheck box string 
         string item = CategoryCBL.Items[index].ToString();
         //compare the list box string against the current Category looking for matches
         if (item == cat)
         {
             //if a match occures the list checkbox at that index is selected 
             CategoryCBL.SelectedIndex = index;

             TextBox1.Text += item + "-" + cat + "-" + index;
         }
     }
 }

Вот мой код коробки контрольного списка:

<asp:CheckBoxList ID="CategoryCBL" class="listItem" RepeatLayout="Table" RepeatColumns="2" RepeatDirection="Vertical" runat="server" Width="100%">
    <asp:ListItem>Referrals</asp:ListItem>
    <asp:ListItem>Outpatients</asp:ListItem>
    <asp:ListItem>Admissions/Discharges</asp:ListItem>
    <asp:ListItem>A&E</asp:ListItem>
    <asp:ListItem>Medical Records</asp:ListItem>
    <asp:ListItem>Outcome Form</asp:ListItem>
    <asp:ListItem>Data Quality</asp:ListItem>
    <asp:ListItem>Executive Reporting</asp:ListItem>
    <asp:ListItem>Infection Control</asp:ListItem>
    <asp:ListItem>Planning and Performance</asp:ListItem>
    <asp:ListItem>QlikView</asp:ListItem>
    <asp:ListItem>Theatres</asp:ListItem>
    <asp:ListItem>Waiting Times</asp:ListItem>
</asp:CheckBoxList>

Поэтому я беру свои категории как result.getString(12).ToString(); в этом примере это равно Infection Control,QlikView,Theatres

Вы также можете увидеть, что я напечатал результат в TextBox1.

Вот результат кода выше

https://imgur.com/a/IwUqt

как видите, выбран ТОЛЬКО театр.

https://imgur.com/y9sYNfW

Выходные данные в TextBox1 показывают, что в X-индексах происходит 3 совпадения, которые совпадают с индексами моих отдельных контрольных списков.

Я действительно хотел бы знать, почему выбран только флажок последних совпадений, а не предыдущие 2 совпадения.

есть идеи?

Спасибо.

2 ответа

Решение

Установите для свойства Selected значение true для каждого элемента, который необходимо проверить.

foreach (ListItem item in CheckBoxList.Items)
{
    item.Selected = true;
}

В вашем коде:

//loops through all list checkboxes 
 for(int index = 0; index <CategoryCBL.Items.Count; index++)
 {
     //gets the listcheck box string 
     string item = CategoryCBL.Items[index].ToString();
     //compare the list box string against the current Category looking for matches
     if (item == cat)
     {
         //if a match occures the list checkbox at that index is selected 
         CategoryCBL.Items[index].Selected= true;

         TextBox1.Text += item + "-" + cat + "-" + index;
     }
 }

Я думаю, что этот вопрос похож и может иметь другие и лучшие ответы Проверьте несколько элементов в ASP.NET CheckboxList

Я думаю, тебе нужно что-то подобное. Вы разделили строку на List и затем проверьте с Linq, если элементы выходят в CategoryCBL а затем установите флажок.

string categories = "Outcome Form, Executive Reporting, QlikView, Waiting Times";

List<string> categorie = categories.Split(',').ToList();

CategoryCBL.Items.Cast<ListItem>().ToList().ForEach(x => x.Selected = categorie.Any(y => y.Trim() == x.Value));

И если вам нужны проверенные элементы в TextBox, вы делаете это

TextBox1.Text = String.Join(", ", CategoryCBL.Items.Cast<ListItem>().Where(x => x.Selected).Select(y => y.Value).ToList());
<asp:CheckBoxList ID="tolgraph" runat="server" RepeatLayout="Table" CssClass="cb" RepeatDirection="Horizontal">
    <asp:ListItem Text="Column" Value="column"></asp:ListItem>
    <asp:ListItem Text="Line" Value="line"></asp:ListItem>
    <asp:ListItem Text="Bar" Value="bar"></asp:ListItem>
    <asp:ListItem Text="Pie" Value="pie"></asp:ListItem>
    <asp:ListItem Text="Radar" Value="Radar"></asp:ListItem>
    <asp:ListItem Text="Pareto" Value="Pareto"></asp:ListItem>
</asp:CheckBoxList>

tolgraph.Items.FindByText("Column").Selected = true;
Другие вопросы по тегам