C#从XML文件利用XPAth获取指定属性值,并显示到datagridview

EmmaFinn 2013-05-13 05:21:08
大家好,

目前我们老师布置了一个作业。将一个XML文件里的值按照ZIP大小,显示到不同的datagridview里。
<Employees>
- <NO1>
<Name>Ma Jin Hu</Name>
<ZIP>239</ZIP>
<Address>Feng Huang Street</Address>
<City>Chu Zhou City</City>
<State>ANHUI</State>
</NO1>
- <NO2>
<Name>Wang Tian</Name>
<ZIP>222</ZIP>
<Address>Lang Ya Street</Address>
<City>He Fei City</City>
<State>ANHUI</State>
</NO2>
- <NO3>
<Name>Zou Wen Biao</Name>
<ZIP>111</ZIP>
<Address>Sai Di Street</Address>
<City>Bei Jin City</City>
<State>Bei Jin</State>
</NO3>
</Employees>
例如》当ZIP<200显示使用NO3信息到datagridview1, ZIP>200显示所有信息到datagridview2.
请问哪位大侠能帮忙下。谢谢啦!
...全文
406 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
EmmaFinn 2013-05-21
  • 打赏
  • 举报
回复
引用 16 楼 u010512392 的回复:
同求答案啊。。。。。。。。。
15 楼Kim_du的是对的。
EmmaFinn 2013-05-21
  • 打赏
  • 举报
回复
引用 15 楼 Kim_Du 的回复:

DataSet ds = new DataSet();
            ds.ReadXml(@"E:\Text.xml");

            DataTable dt = ds.Tables[0].Clone();
            DataTable dt1 = ds.Tables[0].Clone();
            for(int i=0;i<ds.Tables.Count;i++)
            {
                DataRow newRow = ds.Tables[i].Rows[0];
                if (Convert.ToInt32(ds.Tables[i].Rows[0]["ZIP"].ToString()) < 200)
                {
                    dt.Rows.Add(newRow.ItemArray);
                }
                else
                {
                    dt1.Rows.Add(newRow.ItemArray);
                }
            }
            dataGridView1.DataSource = dt;
            dataGridView2.DataSource = dt1;
不好意思,之前没有自己试过,也不知道具体的问题,这个是我自己测试过的
还是同样的错误,不知道为什么...
EmmaFinn 2013-05-20
  • 打赏
  • 举报
回复
刚才没看到楼上的回复,不好意思。 我再试试...多谢大家
EmmaFinn 2013-05-20
  • 打赏
  • 举报
回复
没有...问题还没有解决,我还是没发现那个错误怎么解决.
一个不小心就 2013-05-20
  • 打赏
  • 举报
回复
同求答案啊。。。。。。。。。
Kim_Du 2013-05-20
  • 打赏
  • 举报
回复

DataSet ds = new DataSet();
            ds.ReadXml(@"E:\Text.xml");

            DataTable dt = ds.Tables[0].Clone();
            DataTable dt1 = ds.Tables[0].Clone();
            for(int i=0;i<ds.Tables.Count;i++)
            {
                DataRow newRow = ds.Tables[i].Rows[0];
                if (Convert.ToInt32(ds.Tables[i].Rows[0]["ZIP"].ToString()) < 200)
                {
                    dt.Rows.Add(newRow.ItemArray);
                }
                else
                {
                    dt1.Rows.Add(newRow.ItemArray);
                }
            }
            dataGridView1.DataSource = dt;
            dataGridView2.DataSource = dt1;
不好意思,之前没有自己试过,也不知道具体的问题,这个是我自己测试过的
EmmaFinn 2013-05-20
  • 打赏
  • 举报
回复
Ki_Du.

还是一样的错误。不知道是不是》 列ID不属于xml的集合元素

Kim_Du 2013-05-20
  • 打赏
  • 举报
回复
写错了,不好意思啊,应该是ds.Tables[0].Rows.Count
EmmaFinn 2013-05-20
  • 打赏
  • 举报
回复
引用 10 楼 Kim_Du 的回复:
不好意思啊,你没有引用,我这边没有提示,现在才看到 首先你的逻辑不对,循环的应该是表里面的数据而不是表,你可以断点看一下,应该是Tables[0]里面,所以你循环的话,应该循环dt.Tables[0].Rows.Count 还有

dt.Merge(ds.Tables[i]);
dt1.Merge(ds.Tables[i]);
改为

dt.Rows.Add(dt.Tables[0].Rows[i])//i为循环变量
dt1.Rows.Add(dt.Tables[0].Rows[i])//i为循环变量
后面就给不同的DataGridView绑定不同的DataTable就可以了 至于为什么会出现那个错误,是因为new一个DataTable之后,如果没有给他指定列的话,它会有一个默认的列--ID,这样就导致两个表的字段不对应
谢谢Kim_Du , 这边dt.Tables[0].Rows[i] 不可以,因为datatable没有tables 这样的definition。。。 还有我这边ID在xml文件里,是第四个childnode.不知道这个会不会影响 我明天就需要交作业了, 希望大家多帮忙。我会把我所有极点作为答谢的一些心意。 谢谢大家
EmmaFinn 2013-05-20
  • 打赏
  • 举报
回复
谢谢Kim_Du , 这边dt.Tables[0].Rows[i] 不可以,因为datatable没有tables 这样的definition。。。 还有我这边ID在xml文件里,是第四个childnode.不知道这个会不会影响 我明天就需要交作业了, 希望大家多帮忙。我会把我所有极点作为答谢的一些心意。 谢谢大家。
Kim_Du 2013-05-20
  • 打赏
  • 举报
回复
不好意思啊,你没有引用,我这边没有提示,现在才看到 首先你的逻辑不对,循环的应该是表里面的数据而不是表,你可以断点看一下,应该是Tables[0]里面,所以你循环的话,应该循环dt.Tables[0].Rows.Count 还有

dt.Merge(ds.Tables[i]);
dt1.Merge(ds.Tables[i]);
改为

dt.Rows.Add(dt.Tables[0].Rows[i])//i为循环变量
dt1.Rows.Add(dt.Tables[0].Rows[i])//i为循环变量
后面就给不同的DataGridView绑定不同的DataTable就可以了 至于为什么会出现那个错误,是因为new一个DataTable之后,如果没有给他指定列的话,它会有一个默认的列--ID,这样就导致两个表的字段不对应
EmmaFinn 2013-05-20
  • 打赏
  • 举报
回复
不好意思, 这里》 if (Convert.ToInt32(node3.InnerText) > 200) { //你的操作 break; } 你的操作,我怎么把它跟datagridview 链接起来。 这里没有对table 操作了,怎么联系呢. 谢谢大家!
W762073554 2013-05-18
  • 打赏
  • 举报
回复
楼主问题解决了没?
爱在今世 2013-05-18
  • 打赏
  • 举报
回复
XmlDocument doc = new XmlDocument();
            doc.Load("文件名");
            foreach (XmlNode node1 in doc.ChildNodes)
            {
                foreach (XmlNode node2 in node1.ChildNodes)
                {
                    foreach (XmlNode node3 in node2.ChildNodes)
                    {
                        if (node3.Name == "ZIP")
                        {
                            if (Convert.ToInt32(node3.InnerText) > 200)
                            {
                                //你的操作
                                break;
                            }
                        }
                    }
                }
            }
  • 打赏
  • 举报
回复
引用 2 楼 u010495799 的回复:
谢谢 Kim_Du , 按照你说的我得到一个error,代码如下》 DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath("~/test.xml")); DataTable dt = new DataTable(); DataTable dt1=new DataTable(); for(int i=0;i<ds.Tables.Count;i++) { if (Convert.ToInt32(ds.Tables[i].Rows[0]["ZIP"].ToString())>200) { dt.Merge(ds.Tables[i]); } else { dt1.Merge(ds.Tables[i]); } } 错误是Column 'ID' does not belong to table ExternalCommunication. 请问你知道这是为什么吗——谢谢了,我实在紧急啊啊
列ID不属于xml的集合元素
EmmaFinn 2013-05-18
  • 打赏
  • 举报
回复
谢谢 Kim_Du , 按照你说的我得到一个error,代码如下》 DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath("~/test.xml")); DataTable dt = new DataTable(); DataTable dt1=new DataTable(); for(int i=0;i<ds.Tables.Count;i++) { if (Convert.ToInt32(ds.Tables[i].Rows[0]["ZIP"].ToString())>200) { dt.Merge(ds.Tables[i]); } else { dt1.Merge(ds.Tables[i]); } } 错误是Column 'ID' does not belong to table ExternalCommunication. 请问你知道这是为什么吗——谢谢了,我实在紧急啊啊
Kim_Du 2013-05-13
  • 打赏
  • 举报
回复
解析Xml啊,根据<zip>节点的值去填充不同的DataTable,做为不同的DataGridView的DataSource

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧