Multi-Select ListBox - методы не работают - PullRequest
0 голосов
/ 18 апреля 2011

Я работаю с C # 2.0 - VS 2005 Последние SP.

Проблема в том, что я не могу захватить вторые элементы из поля UserGroup, даже если для ListBox SelectionMode задано несколько значений.Я прикрепил кнопку, которая обрабатывает список.Я включил два сегмента кода, которые я пытался решить эту проблему.Это отмечено в комментариях.

Я получаю первый выбранный элемент как истинный, но второй выбранный элемент ложный.Таким образом, добавление выбранного значения к объекту Grp никогда не происходит.

 <asp:ListBox ID="UserGroup" Rows="5" runat="server" SelectionMode="multiple" CssClass="txtbox"></asp:ListBox>

Код здесь:

  protected void MapStudentGroup_OnClick(object sender, EventArgs e)
    {
        ListBox lstGroup = this.FindControl("UserGroup") as ListBox;
        ListBox lstStudent = this.FindControl("lbStudent") as ListBox;
        List<Group> Grps = new List<Group>();

        if (lstGroup.SelectedIndex != -1 && lstStudent.SelectedIndex != -1)
        {
            UserGroup usrGrp = new UserGroup();
            usrGrp.Id = Convert.ToInt32(lstStudent.SelectedValue);
            // get selected groups....

            // 1st Method tried here: 
            foreach (ListItem itm in lstGroup.Items)
            {
                if (itm.Selected == true)
                {
                    Group grp = new Group();
                    grp.GroupId = Convert.ToInt32(itm.Value);
                    Grps.Add(grp);
                }
            }

            // 2nd method tried.
            for (int i = 0; i < lstGroup.Items.Count; ++i)
            {
                if (lstGroup.Items[i].Selected == true)
                {
                    Group grp = new Group();
                    grp.GroupId = Convert.ToInt32(lstGroup.Items[i].Value);
                    Grps.Add(grp);
                }
            }

            // 3rd attempt : multiple selected items still not seen - Firefox Issue? 
            List<ListItem> selectedItems = new List<ListItem>();
            int[] selectedItemsIndexes = lstGroup.GetSelectedIndices();
            foreach (int selectedItem in selectedItemsIndexes)
            {
                //selectedItems.Add(lstGroup.Items[selectedItem]);
                Group grp = new Group();
                grp.GroupId = Convert.ToInt32(lstGroup.Items[selectedItem].Value);
                Grps.Add(grp);
            }

            usrGrp.UserGroups = Grps;
            // update group-user mappings...
            usrGrp.UpdateUserGroups(usrGrp);
        }
    }

1 Ответ

1 голос
/ 18 апреля 2011

Я бы сначала упростил задачу, выполнив следующее:

    foreach (object itm in lstGroup.SelectedItems)
    {
         Group grp = new Group();
         grp.GroupId = Convert.ToInt32(itm);
         Grps.Add(grp);
    }

Таким образом, код немного чище.Тестируя это, я могу получить все свои выборы, чтобы показать.

Поскольку вы на самом деле ничего не упоминали об отладке, если вышеуказанное решение не работает для вас, я бы поставил точку останова сразу после окончания foreach и посмотрел бы содержимое Grps.Если в Grps содержится нужное количество элементов, проблема кроется в вашем коде.Возможно, это метод usrGrp.UpdateUserGroups().

Я действительно не понимаю, почему в Grps нет нужного количества элементов, но если нет, дайте нам знать, и яконечно, мы можем что-то выяснить.

Обновление : Я попробовал урезанную версию вашего кода.Это работает правильно для меня.Проверьте это, а затем посмотрите, сможете ли вы собрать его обратно, чтобы сделать то, что вам нужно.

Я определил простой список для хранения выборов:

List<int> selectionList = new List<int>();

ЗатемЯ заполняю его, используя вашу общую структуру, за исключением того, что я вызываю элемент управления напрямую, поскольку он уже существует на текущей странице, а не полагаюсь на this.FindControl ().

protected void Button1_Click(object sender, EventArgs e)
{
    foreach (ListItem itm in UserGroup.Items)
    {
        if (itm.Selected == true)
        {
            selectionList.Add(Convert.ToInt32(itm.Value));
        }
    }
}

После нажатия этой кнопки, если я выбрал 3 элемента, тогда 3 элемента находятся в selectionList.Надеюсь, у вас тот же результат.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...