我需要使用datatable在gridview中显示我的xml。 我的XML以这种方式组成:
现在我以这种方式获取数据:
XmlDocument doc = new XmlDocument();
doc.Load(@"path\MyXml.xml"); //Percorso file xml
DataTable dt = new DataTable();
foreach (XmlNode xns in doc.SelectSingleNode("Settembre"))
{
string tagName = xns.Name;
if (!dt.Columns.Contains(tagName))
{
dt.Columns.Add(tagName);
}
}
使用这部分代码,我根据" Settembre"的子标签添加我的列。 (例如" ven_01")并且这有效。
然后我正在写东西(" Settembre"的儿童标签的子标签的内部文本,例如" Mattina_Turno_1"" ven_01")进入以这种方式的细胞
DataRow dr = dt.NewRow();
foreach (XmlNode xns in doc.SelectSingleNode("Settembre"))
{
dr[xns.Name] = xns.InnerText;
}
dt.Rows.Add(dr);
GridView1.DataSource = dt;
GridView1.DataBind();
这也有效,但我想要做的是显示由innerText的父节点组成的第一列作为每行第一列第一个单元格中的行名称(最大值为3,更好地解释是标签" Mattina_Turno1"," Mattina_Turno_2"和#34; Pomeriggio",里面可以是一些内部文字)
这是我试图做了一段时间。 此外,因为行名称只有3而列名称可以超过3我想要还原它们,所以,如果可能的话,在列标题中显示行名称(所以" Mattina_Turno1& #34;," Mattina_Turno_2"和#34; Pomeriggio"代替)和行命名" Settembre"子标签(例如" ven_01")。
我希望我让我理解
请不要标记为重复,因为我在网上搜索了很多并且没有找到解决方案,所以请不要进行downvote并将其标记为重复,否则不是。
答案 0 :(得分:0)
我通过这样做找到了解决方案:
DataTable dt = new DataTable();
dt.Columns.Add("Data");
foreach (XmlNode xns in doc.DocumentElement)
{
if (xns.Name == "Settembre") ///IMPLEMENTARE SELEZIONE AUTOMATICA DEL MESE IMPORTANTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
foreach (XmlNode xn in xns)
{
string tagName = xn.Name;
var a = dt.Rows.Add(tagName);
// int index_of_a = dt.Rows.IndexOf(a);
}
}
dt.Columns.Add("Mattina Turno 1");
dt.Columns.Add("Mattina Turno 2");
dt.Columns.Add("Pomeriggio");
expo_days.DataSource = dt;
expo_days.DataBind();
foreach (XmlNode xns in doc.DocumentElement)
{
if (xns.Name == "Settembre") ///IMPLEMENTARE SELEZIONE AUTOMATICA DEL MESE IMPORTANTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
foreach (XmlNode xn in xns)
{
string tagName = xn.Name;
var a = dt.Rows.Add(tagName);
// int index_of_a = dt.Rows.IndexOf(a);
DataRow[] rows = dt.Select("Data = '"+tagName+"'");
foreach (XmlNode xna in xn)
{ //sistemare le celle in base alla colonna della gridview
if(xna.Name == "Mattina_Turno_1") //here i specify in wich column is the "Mattina_Turno_1" and fill in that cell, and so on
expo_days.Rows[dt.Rows.IndexOf(rows[0])].Cells[3].Text = xna.InnerText;
if (xna.Name == "Mattina_Turno_2")
expo_days.Rows[dt.Rows.IndexOf(rows[0])].Cells[4].Text = xna.InnerText;
if (xna.Name == "Pomeriggio")
expo_days.Rows[dt.Rows.IndexOf(rows[0])].Cells[5].Text = xna.InnerText;
}
}
}