Существет файл XML
<?xml version="1.0" encoding="utf-8"?>
<specifications>
<s>Test1</s>
<sg>014</sg>
<sg>016</sg>
<sg>014</sg>
<sg>014</sg>
<sg>016</sg>
<s>Test2</s>
<sg>015</sg>
<sg>017</sg>
<sg>017</sg>
<sg>017</sg>
</specifications>
И так же существует форма, на которой поставлено два ComboBox-а.
Мне необходимо сделать так, чтобы при выборе в Комбобоксе1 (Test1), в Комбобоксе2 отображалось только то, что принадлежит Test1 - (014, 016), и соответсвенно при выборе в Комбобоксе1 (Test2), в Комбобоксе2 отображалось (015, 017). Чтобы в комбобоксе2 отображалось, все нужное и без повторений
Пытался что-то сделать таким образом
XmlDocument xDoc = new XmlDocument();
xDoc.Load("Specification.xml");
XmlNodeList Listik = xDoc.SelectNodes("//s");
foreach (XmlNode name in Listik)
{
comboBox1.Items.Add(name.InnerText);
XmlNodeList Listik1 = xDoc.SelectNodes("//sg");
foreach (XmlNode name1 in Listik1)
{
comboBox2.Items.Add(name1.InnerText);
object[] mas = comboBox2.Items.OfType<string>().Distinct().ToArray();
comboBox2.Items.Clear();
comboBox2.Items.AddRange(mas);
}
}
Но честно говоря, до логического завершения так довести и не смог.
Что посоветуете?
И да, я знаю, что вопрос наверно 100% легкий. Отчаянно туплю...
начнем с того, что неправильно построен xml файл, вот правильный вариант в твоем случае:
<?xml version="1.0" encoding="utf-8"?>
<specifications>
<s name="Test1">
<sg>014</sg>
<sg>016</sg>
<sg>014</sg>
<sg>014</sg>
<sg>016</sg>
</s>
<s name="Test2">
<sg>015</sg>
<sg>017</sg>
<sg>017</sg>
<sg>017</sg>
</s>
</specifications>
далее, ты создаешь 2 ComboBox, первому добавляешь событие SelectedIndexChanged и в зависимости от этого меняешь значение во втором
public List<string> ListTest1 { get; } = new List<string>();
public List<string> ListTest2 { get; } = new List<string>();
public Form1()
{
InitializeComponent();
XmlDocument xDoc = new XmlDocument();
xDoc.Load("Specification.xml");
XmlElement xRoot = xDoc.DocumentElement;
foreach (XmlElement xnode in xRoot)
{
XmlNode attr = xnode.Attributes.GetNamedItem("name");
comboBox1.Items.Add(attr.Value);
foreach (XmlNode childnode in xnode.ChildNodes)
{
switch (attr.Value)
{
case "Test1":
if(!ListTest1.Contains(childnode.InnerText))
ListTest1.Add(childnode.InnerText);
break;
case "Test2":
if (!ListTest2.Contains(childnode.InnerText))
ListTest2.Add(childnode.InnerText);
break;
}
}
}
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox comboBox = (ComboBox)sender;
string selectedValue = (string)comboBox1.SelectedItem;
switch (selectedValue)
{
case "Test1":
comboBox2.DataSource = ListTest1;
break;
case "Test2":
comboBox2.DataSource = ListTest2;
break;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
Я новичок и пишу систему сохранений в Unity, которую хотелось бы использовать и в других своих проектахВ Интернете полно способов сделать сохранения...