C#用XML中的数据填充Listview

C#用XML中的数据填充Listview,c#,xml,linq,listview,dataset,C#,Xml,Linq,Listview,Dataset,我在做一个简单的项目。我有windows窗体,当窗体打开时,我希望我的“Userslistview”包含3列,并用程序创建的XML中的数据填充 我尝试了几种方法,但listview仍然是空的。 下面是我使用的加载事件代码 private void MainMenu_Load(object sender, EventArgs e) { string xmlfile = AppDomain.CurrentDomain.BaseDirectory + "Us

我在做一个简单的项目。我有windows窗体,当窗体打开时,我希望我的“Userslistview”包含3列,并用程序创建的XML中的数据填充

我尝试了几种方法,但listview仍然是空的。 下面是我使用的加载事件代码

    private void MainMenu_Load(object sender, EventArgs e)
    {

        string xmlfile = AppDomain.CurrentDomain.BaseDirectory + "Users.xml";
        if (!File.Exists(xmlfile))
        {
            return;
        }
        UserslistView.View = View.Details;
        UserslistView.GridLines = true;
        UserslistView.Sorting = SortOrder.Descending;
        UserslistView.FullRowSelect = true;
        UserslistView.Columns.Add("Active", 80);
        UserslistView.Columns.Add("username", 120);
        UserslistView.Columns.Add("Last Logon", 120);

        UserslistView.Items.Clear();
        DataSet ds = new DataSet();
        ds.ReadXml(xmlfile);
        ListViewItem item;
        foreach (DataRow dr in ds.Tables["user"].Rows)
        {
            item = new ListViewItem(new string[]
             {
                dr["username"].ToString(),
                dr["USERID"].ToString(),
                dr["lastlogon"].ToString()

            });
            UserslistView.Items.Add(item);

        }
    }

and here's the XMl im using

更新1 我用我的代码换了这个

private void MainMenu_Load(object sender, EventArgs e)
    {
        UserslistView.View = View.Details;
        UserslistView.GridLines = true;
        UserslistView.FullRowSelect = true;
        UserslistView.Columns.Add("Active", 100);
        UserslistView.Columns.Add("username", 120);
        //UserslistView.Columns.Add("Last Logon", 100);

        string xmlfile = AppDomain.CurrentDomain.BaseDirectory + "Users.xml";
        XmlDocument doc = new XmlDocument();
        try
        {
            doc.Load(xmlfile);
            foreach (XmlNode n in doc.SelectNodes("/Users//user"))
            {
                ListViewItem li = new ListViewItem(n.SelectSingleNode("username").InnerText);
                li.SubItems.Add(n.SelectSingleNode("lastlogon").InnerText);
                UserslistView.Items.Add(li);
            }
        }
        catch { }
    }
节点的计数为2。
但是listview仍然保持为空

首先确保您的xml在项目中可用。我举了一个例子:


您可以使用
XDocument
解析您的
Xml

XDocument doc = XDocument.Load(file path);

    var nodes = doc.Descendants("user").Select(e=> new ListViewItem( new [] { 

        e.Element("username").Value,
e.Element("USERID").Value,

        //e.Element("password").Value,
        e.Element("lastlogon").Value
    })).ToArray();



UserslistView.Items.AddRange(nodes);

好奇的是,你调试过这个吗?我想我不需要将xml添加到资源中,或者我需要吗?我在第二个表单上有一个组合框,它只正确地填充了用户名。当我试图解析它时,它声明根元素无效。当我调试它时,它似乎包含项集合,但不会填充listview,我在这里缺少什么。快速补充说明我对c#还是一个新手,因此非常感谢您的帮助。我尝试使用parse方法,但它说我的根元素是invalid@JeffReek它应该被加载,当我们有xml字符串时使用解析。已更正,请立即尝试。刚刚更改,Listview仍为空。真的不知道它错了吗?也从列表中注释掉密码。更新。
XDocument doc = XDocument.Load(file path);

    var nodes = doc.Descendants("user").Select(e=> new ListViewItem( new [] { 

        e.Element("username").Value,
e.Element("USERID").Value,

        //e.Element("password").Value,
        e.Element("lastlogon").Value
    })).ToArray();



UserslistView.Items.AddRange(nodes);