Выбор элементов в множественном списке выбора из поля строки базы данных с разделителями - PullRequest
2 голосов
/ 10 февраля 2009

Я пытаюсь создать «страницу редактирования» для записи базы данных, которую можно редактировать и сохранять обратно в базу данных. Одним из полей будет список с множественным выбором, который должен будет выделять соответствующие элементы списка в жестко запрограммированном списке при загрузке.

Используя C #, как мне заполнить список с множественным выбором - с соответствующими выбранными элементами - на основе строки, разделенной запятыми, из поля базы данных? Я исследовал несколько решений, которые включают циклы, но я не смог заставить их работать с моим ограниченным набором навыков C #.

Это все, что у меня есть сейчас, пока я не застрял. Вы увидите, что он не учитывает несколько значений в строке. Есть ли функция типа «содержит», которую я могу проверить, чтобы убедиться, что значение совпадает? Я все еще скучаю по некоторой (возможно, базовой) логике C # и кодированию здесь.

int i;
for (i = 0; i <= CATEGORYListBox.Items.Count - 1; i++)
{
    if (reader["CATEGORY"].ToString() == CATEGORYListBox.Items(i).Value)
    {
        CATEGORYListBox.Items(i).Selected = True;                   
    }
}

...

<asp:ListBox ID="CATEGORYListBox" runat="server">
    <asp:ListItem Value="Circulation">Circulation</asp:ListItem>
    <asp:ListItem Value="Interactive Media">Interactive Media</asp:ListItem>
    <asp:ListItem Value="Classified">Classified</asp:ListItem>
    <asp:ListItem Value="Publishing">Publishing</asp:ListItem>
    <asp:ListItem Value="Editorial">Editorial</asp:ListItem>
    <asp:ListItem Value="Retail">Retail</asp:ListItem>
 </asp:ListBox>

Спасибо всем.

Ответы [ 5 ]

5 голосов
/ 10 февраля 2009

Я бы предложил что-то в этом роде. Это кажется более читабельным, чем выполнение вложенных циклов.

    List<string> categories = new List<string>(reader["CATEGORY"].ToString().Split(','));
    foreach (ListItem item in CATEGORYListBox.Items)
    {
        if (categories.Contains(item.Value))
            item.Selected = true;
    }
2 голосов
/ 10 февраля 2009

Это грубая сила и безобразная, но она должна работать. Похоже, что ваш код выше является своего рода гибридом между VB и C #. Код ниже только C #. Кроме того, не стоит использовать ADO.Net в свой код.

for (int i = 0; i < CATEGORYListBox.Items.Count; i++)
{
    foreach (string category in reader["CATEGORY"].ToString().Split(','))
    {
        if (category != CATEGORYListBox.Items[i].Value) continue;
        CATEGORYListBox.Items[i].Selected = true;
        break;
    }
}
0 голосов
/ 13 июня 2013
ListBox1.SelectionMode = ListSelectionMode.Multiple;
string[] pageRoles = myReader["UserProfile"].ToString().Split(',').ToArray();
pageRoles.ToList().ForEach(r => ListBox1.Items.FindByValue(r).Selected = true);
0 голосов
/ 22 сентября 2010

Самая простая реализация?

string sequenceFromDBorPostBack= "1,3,4,6,48";

foreach (ListItem item in lstLocations.Items)
{
     item.Selected = sequenceFromDBorPostBack.Split(',').Contains(item.Value);
}

Я не уверен, эффективна ли эта производительность ..

0 голосов
/ 06 октября 2009

Другое решение проблемы:

    string[] arrSplitItems;
    arrSplitItems = TestsOrdrd.Split(',');
    if (arrSplitItems.Length > 0)
    {
        for (int iCount = 0; iCount < arrSplitItems.Length; iCount++)
        {
            lstTestcode.Items.FindByValue(arrSplitItems[iCount].ToString()).Selected = true;
        }
    }

TestsOrdrd содержит выбранные значения списка.

Спасибо, Ратика Кришнавелу

...