Войти

Показать полную графическую версию : [решено] Загрузка Xml-файла в ComboBox


Hector
02-02-2012, 03:05
есть 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>


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

существует форма, такого вида:
http://s017.radikal.ru/i411/1202/17/0f44294bc226t.jpg (http://radikal.ru/F/s017.radikal.ru/i411/1202/17/0f44294bc226.png.html)

собственно задача, при загрузке формы надо, чтобы имена юзеров загружались в 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
можно так


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
При считывании атрибутов не плохо было бы добавить ещё проверку существования атрибутов.

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

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

Hector
03-02-2012, 13:42
Delirium, задание такое




© OSzone.net 2001-2012