Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Загрузка Xml-файла в ComboBox (http://forum.oszone.net/showthread.php?t=226848)

Hector 02-02-2012 03:05 1849793

Загрузка Xml-файла в ComboBox
 
есть xml-файл:
Код:

<?xml version="1.0" encoding="UTF-8"?>
<users>
  <user id="1">
    <name>Den</name>
    <pwd>456</pwd>
  </user>
  <user id="2">
    <name>John</name>
    <pwd>123</pwd>
  </user>
</users>

это просто список учетных записей для авторизации.

существует форма, такого вида:


собственно задача, при загрузке формы надо, чтобы имена юзеров загружались в ComboBox(слева), а в TextBox был пароль того юзера, что выбран в ComboBox и естественно при смене пользователя пароль тоже менялся

я пытался сделать так:
Код:

// при загрузке формы подключаю файл с учетками
  private void manager_Load(object sender, EventArgs e)
        {
         
                usersList.Text="Список пользователей";
                pwdCurUser.Text = "Пароль";
              // загружает документ с аккаунтами 
                XmlDocument xd = new XmlDocument();

                xd.Load("acc.xml");
               
                // Создает и заполняет список по тегу "user"
                XmlNodeList list = xd.GetElementsByTagName("user");
                а дальше проблема
        }

я не знаю, какими методами загрузить информацию в textbox и что бы она соответствовала combobox
при помощи поиска получился вариант:
Код:

              // переменные для элементов
                XmlElement[] name = new XmlElement[list.Count];
                XmlElement[] pwd = new XmlElement[list.Count];
                for (int i = 0; i < list.Count; i++)
                {
                    name[i] = (XmlElement)xd.GetElementsByTagName("name")[i];      // имя в переменную 
                    pwd[i] = (XmlElement)xd.GetElementsByTagName("pwd")[i];  // пароль в переменную 
                }
                for (int i = 0; i < list.Count; i++)
                {
                    usersList.Items.Add(name[i].InnerText);
                    pwdCurUser.Lines[i]=pwd[i].InnerText;
                }

но он не работает, генерирует исключение, о выходе за границы индекса массива (идея была в SelectedIndexChanged при смене пользователя подставлять соответствующую строку из Lines[i], но видимо, я не так что-то понял)

ferget 02-02-2012 06:18 1849819

можно так

Код:

        XmlNodeList list;
        XmlElement[] name;
        XmlElement[] pwd;
       
        private void manager_Load(object sender, EventArgs e)
        {
            usersList.Text="Список пользователей";
            pwdCurUser.Text = "Пароль";
            // загружает документ с аккаунтами 
            XmlDocument xd = new XmlDocument();

            xd.Load("acc.xml");
               
            // Создает и заполняет список по тегу "user"
            list = xd.GetElementsByTagName("user");

            name = new XmlElement[list.Count];
            pwd = new XmlElement[list.Count];

            for (int i = 0; i < list.Count; i++)
            {
                name[i] = (XmlElement)xd.GetElementsByTagName("name")[i];      // имя в переменную 
                pwd[i] = (XmlElement)xd.GetElementsByTagName("pwd")[i];  // пароль в переменную 
            }

            for (int i = 0; i < list.Count; i++)
            {
                usersList.Items.Add(name[i].InnerText);
            }

        }

        private void usersList_SelectedIndexChanged(object sender, EventArgs e)
        {
          int i = usersList.SelectedIndex;
          pwdCurUser.Text = pwd[i].InnerText;
        }


Drongo 02-02-2012 15:17 1850086

При считывании атрибутов не плохо было бы добавить ещё проверку существования атрибутов.

Hector 02-02-2012 15:52 1850109

а можно как-то обойтись без лишних массивов name и pwd, загрузив в combobox весь list?

Delirium 03-02-2012 04:41 1850557

Hector, а зачем вообще Combobox? В TreeView XML очень удачно загружается и готовых примеров куча.

Hector 03-02-2012 13:42 1850857

Delirium, задание такое


Время: 14:05.

Время: 14:05.
© OSzone.net 2001-