100分 XML绑定到datagridview,给源码的分全给他

linwanhai 2010-10-21 04:09:33
XML结构如下
  <Headlist>
<HeadStruct>
<EBELN>38</EBELN>
<LIFNR>A48</LIFNR>
<FRGZU>X</FRGZU>
<DDSXZ>P</DDSXZ>
<Detaillist>
<DetailStruct>
<EBELP>00010</EBELP>
<LOEKZ />
<MATNR>LJDLQT19J00060</MATNR>
<MENGE>10.000</MENGE>
<MEINS>PC</MEINS>
<WERKS>80</WERKS>
<LGORT>61</LGORT>
<ATWRT>qqqq</ATWRT>
</DetailStruct>
<DetailStruct>
<EBELP>00020</EBELP>
<LOEKZ />
<MATNR>LJD</MATNR>
<MENGE>10.000</MENGE>
<MEINS>PC</MEINS>
<WERKS>8</WERKS>
<LGORT>81</LGORT>
<ATWRT>qqqq</ATWRT>
</DetailStruct>
</Detaillist>
</HeadStruct>
</Headlist>
...全文
177 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
烧饼vs馒头 2010-10-21
  • 打赏
  • 举报
回复
楼主提供的Xml文件中的内容是两个表格,所以我手动把这两张表合并为一张表,然后再付给DataGrid,下面是几个相关的函数,楼主可以借鉴一下.至于绑定DataGird我就不写出来了。
/// <summary>
/// 读取XML文件到DataSet
/// </summary>
/// <returns></returns>
DataSet GetDataFromXml()
{
string strpath = @"D:\working\oldFiles\WpfBrowserApp10\WpfBrowserApp10\datatset.xml";
DataSet ds = new DataSet();
ds.ReadXml(strpath);
return ds;
}

/// <summary>
/// 根据DS生成DataTable(用于存储Ds中三个Table中的数据)
/// </summary>
/// <param name="ds"></param>
/// <returns></returns>
DataTable CreateDataTable(DataSet ds)
{
DataTable dt = new DataTable();

for (int i = 0; i < ds.Tables.Count; i++)
{
foreach (DataColumn dc in ds.Tables[i].Columns)
{
if (dt.Columns.Contains(dc.ColumnName)) continue;
dt.Columns.Add(new DataColumn(dc.ColumnName,dc.DataType));
}
}
return dt;
}

/// <summary>
/// 把DS中3个Table的数据合成到一个DataTable中
/// </summary>
/// <param name="ds"></param>
/// <param name="dt"></param>
/// <returns></returns>
DataTable FillDataToDataTable(DataSet ds, DataTable dt)
{
for (int i = 0; i < ds.Tables.Count; i++)
{
for(int _i=0;_i<ds.Tables[i].Rows.Count;_i++)
{
DataRow drTmp = dt.NewRow();
dt.Rows.Add(drTmp);
for (int j = 0; j < ds.Tables[i].Columns.Count;j++ )
{
dt.Rows[_i][ds.Tables[i].Columns[j].ColumnName] = ds.Tables[i].Rows[_i][j];
}
}
}
return dt;
}
linwanhai 2010-10-21
  • 打赏
  • 举报
回复
弄好了 感谢各位 见者有分
五位数 2010-10-21
  • 打赏
  • 举报
回复
建议你用LINQ。这个很好做出来的。
shaoliang520xi 2010-10-21
  • 打赏
  • 举报
回复
有没有你做的效果图呀?
shaoliang520xi 2010-10-21
  • 打赏
  • 举报
回复
string url=Server.MapPath("~/XMLFile.xml");
DataSet ds = new DataSet();
ds.ReadXml(url);

this.GridView1.DataSource = ds.Tables[0];
this.GridView1.DataBind();



<?xml version="1.0" encoding="utf-8" ?>
<Headlist>
<HeadStruct>
<EBELN>38</EBELN>
<LIFNR>A48</LIFNR>
<FRGZU>X</FRGZU>
<DDSXZ>P</DDSXZ>
<Detaillist>
<DetailStruct>
<EBELP>00010</EBELP>
<LOEKZ />
<MATNR>LJDLQT19J00060</MATNR>
<MENGE>10.000</MENGE>
<MEINS>PC</MEINS>
<WERKS>80</WERKS>
<LGORT>61</LGORT>
<ATWRT>qqqq</ATWRT>
</DetailStruct>
<DetailStruct>
<EBELP>00020</EBELP>
<LOEKZ />
<MATNR>LJD</MATNR>
<MENGE>10.000</MENGE>
<MEINS>PC</MEINS>
<WERKS>8</WERKS>
<LGORT>81</LGORT>
<ATWRT>qqqq</ATWRT>
</DetailStruct>
</Detaillist>
</HeadStruct>
</Headlist>
linwanhai 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shaoliang520xi 的回复:]

帮出来的效果要什么样的。你的XML是有结构形式的。
[/Quote]
一个头,多个细节,解析后把头和每条细节都整合成一条记录,有多个细节的话就是多条记录
sprc_lcl 2010-10-21
  • 打赏
  • 举报
回复
            DataTable dt = new DataTable();
dt.Columns.Add("EBELP");
dt.Columns.Add("LOEKZ");
dt.Columns.Add("MATNR");
dt.Columns.Add("MENGE");
dt.Columns.Add("MEINS");
dt.Columns.Add("WERKS");
dt.Columns.Add("LGORT");
dt.Columns.Add("ATWRT");

XmlDocument xd = new XmlDocument();
//xd.Load(filepath);
//xd.LoadXml(string);
XmlNodeList xnl = xd.GetElementsByTagName("DetailStruct");
foreach (XmlNode xn in xnl)
{
DataRow dr = dt.NewRow();
for (int i = 0; i < dt.Columns.Count; i++)
{
string cName = dt.Columns[i].ColumnName;
XmlNode xnC = xn.SelectSingleNode(cName);
if (xnC != null) dr[cName] = xnC.InnerText;
}
dt.Rows.Add(dr);
}

this.dataGridView1.DataSource = dt;
shaoliang520xi 2010-10-21
  • 打赏
  • 举报
回复
帮出来的效果要什么样的。你的XML是有结构形式的。
wapdos 2010-10-21
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20091231/00/4555a7a0-1ee6-4704-9d93-042ceb703633.html

111,129

社区成员

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

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

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