C#WinForms - 从XML导入数据到Listbox

时间:2015-10-15 01:11:40

标签: c# xml winforms import

XML代码        

// create a dialog window, dig.panel = dialog panel
var dig = new Window('dialog', 'Poster Interface - Choose 4 Images', [550, 120, 1150, 800]);

//define variables for panel dimensions
var digX = 100;
var digY = 50;
var digWidth = 510;
var digHeight = 140;
var digUp = 110;

var panels = [
    [panel1, panel2, panel3, panel4]
];
var labels = [
    [label1, label2, label3, label4]
];
var texts = [
    [t1, t2, t3, t4]
];
var buttons = [
    [bt1, bt2, bt3, bt4]
];


//create panels for the image components
//first loop for panel dimensions multiply by x
// nested loop for contents using i

for (x = 0; x < 4; x++) {
    dig.panels[x] = dig.add('panel', [digX, digY + (digUp * x), digWidth, digHeight + (digUp * x)], 'Image ' + (x + 1) + ':');
    for (i = 0; i < 4; i++) {
        dig.panels[i].labels[i] = dig.panels[i].add('statictext', [20, 20, 120, 40], 'Choose Image' + (i + 1) + ':');
        dig.panels[i].texts[i] = dig.panels[i].add('edittext', [125, 20, 325, 40], 'image' + (i + 1) + '.jpg');
        dig.panels[i].buttons[i] = dig.panels[i].add('button', [330, 20, 380, 40], 'Open');
    }
}

我如何保存XML

-<RegionBox>

<Regions>fdzg</Regions>

<Regions>asgfasd</Regions>

<Regions>sdfadga</Regions>

<Regions>adsfgsfha</Regions>

</RegionBox>

我希望能够将数据导回到列表框中 目前我已经尝试了

 XElement element = new XElement("RegionBox");
        foreach (var item in listBox1.Items)
        {
            element.Add(new XElement("Regions", item));


            //DataRow listRow = ds.Tables["RegionBox"].NewRow();
            //listRow["List"] = listBox1.Items;
            //Console.WriteLine(item);
        }
        XDocument document = new XDocument();
        document.Add(element);
        document.Save("XMLFile2.xml");

            ds.ReadXml("XMLFile2.xml");
        {
        for (int i = 0; i < ds.Tables["RegionBox"].Columns.Count; i++)
            listBox1.Items.Add(ds.Tables["Regions"].Rows[0][i].ToString());
        setImage.BackgroundImage = System.Drawing.Image.FromFile(filePath.Text);
        }

但我似乎无法导入信息......虽然我已成功获得第一项或最后一项但只有一项而不是所有项目都可以导入

由于

3 个答案:

答案 0 :(得分:0)

UPDATE ::发布后我发现我继续搜索,然后发现了一个有效的

            XElement element = XElement.Load("XMLFile2.xml");
        foreach (XElement item in element.Elements("Regions"))
        listBox1.Items.Add(item.Value);

答案 1 :(得分:0)

  1. <button type="button" id="buttonclick" onClick="onClick()">Click me</button> <div id="message"></div> 错误,因为参数select new { Item = i.Element("Regions").Value })已经是i的元素,因此您只需更改代码Regions
  2. 我不知道您是否设置了select new { Item = i.Value }),也许您应该添加此代码DisplayMember

答案 2 :(得分:0)

不知道这是否有意义,但是关于读取xml数据然后显示它 -

XmlTextReader xReader = new XmlTextReader("../../Products.xml");
        xReader.WhitespaceHandling = WhitespaceHandling.None;
        XmlDocument xDoc = new XmlDocument();
        xDoc.Load(xReader);
        Console.WriteLine("Please enter product...");
        string product = Console.ReadLine();
        XmlNodeList xNodeList = xDoc.DocumentElement.SelectNodes("//Products/Product");

        foreach (XmlNode xNode in xNodeList)
        {
            if (xNode.NodeType == XmlNodeType.Element)
            {
               // Console.WriteLine(xNode.NodeType.ToString() + " : " + xNode.Name + " =" + xNode.FirstChild.InnerText);
                if (xNode.FirstChild.InnerText == product)
                {
                    string name = xNode.FirstChild.InnerText;
                    string price = xNode.FirstChild.NextSibling.InnerText;
                    Console.WriteLine("Name: " + name + "... Price: R" + price);
                }
                else
                {
                    Console.WriteLine("No Price");
                }
            }
        }
        Console.ReadLine();

XML文件是Products.xml -

<Products>
<Product>
    <name>Bread</name>
    <price>10</price>
</Product>
<Product>
    <name>Milk</name>
    <price>20</price>
</Product>
<Product>
    <name>Coke</name>
    <price>18</price>
</Product>
<Product>
    <name>BarOne</name>
    <price>7</price>
</Product>

一些解释:

只有在添加使用System.Xml后才能访问XmlTextReader;命名空间,初始化XmlTextReader(xReader)后,可以使用.xml文件加载它,我的是Products.xml,它从调试文件夹中找到2个文件夹,因此(“../../”) - 跳过两个文件夹,实际上是根文件夹,但是“debug”文件夹中有2个文件夹。

xmlNodeList选择节点,我所做的只是选择产品,所以下一个节点是名称,之后的下一个兄弟节点是价格。

我确定foreach循环是自我解释的, 第一个if语句确保节点是一个元素, 第二个if语句检查产品名称(面包,牛奶等)是否与用户在开头输入的内容相匹配。如果是,则创建一个字符串,并命名为“name”,因为第一个子节点是名称,我们想要名称的节点值,因此innerText将为我们获取。

为了得到这个价格,我们只说xNode.FirstChild.NextSibling.InnerText,这将从一个节点移动到下一个节点,这就是我们想要的。

希望这有帮助吗?