我正在尝试创建一个包含GridView的ASP.net/C#网页,以及用户将XML文件上传到该页面并将网格绑定到该XML中的节点的能力。必须将XML文件读入内存 - 而不是先保存到服务器 - 这使我无法对许多在线示例进行建模,这些示例假定上传文件在访问时实际上位于服务器上。
简化的测试XML文件如下所示,如果有必要,我确实有一些自由改变或扩展它:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<Grids>
<Grid name="GridView">
<item>
<Uno>1A</Uno>
<Dos>1B</Dos>
<Tres>1C</Tres>
</item>
<item>
<Uno>2A</Uno>
<Dos>2B</Dos>
<Tres>2C</Tres>
</item>
<item>
<Uno>3A</Uno>
<Dos>3B</Dos>
<Tres>3C</Tres>
</item>
<item>
<Uno>4A</Uno>
<Dos>4B</Dos>
<Tres>4C</Tres>
</item>
</Grid>
</Grids>
</root>
客户端需要能够单击 FileUpload 控件,浏览到本地XML文件,并让网格反映上面名为“GridView”的节点中的数据。我无法弄清楚如何从XML数据中提取该节点。如果我创建一个以该节点为根的简化形式的XML文件,它可以正常工作,但我不希望这样做,因为我计划将来扩展它。
以下是我目前所拥有的“导入”代码的显着部分。这不是最佳的 - 我通过反复试验来到这里,所以这里可能有很多垃圾。当我运行它时,我得到一个单细胞网格,其中只包含文本“Grid_Id”而不是我需要的表格数据(尽管目前已经破坏了)。
protected void btnImport_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
string fileExt = System.IO.Path.GetExtension(FileUpload1.FileName);
if (fileExt == ".xml")
{
using (MemoryStream stream = new MemoryStream(FileUpload1.FileBytes)) // Using FileBytes because I can’t save file to server
{
XmlDocument document = new XmlDocument();
document.Load(stream);
stream.Position = 0;
string xmlFile;
using (StreamReader inputStreamReader = new StreamReader(FileUpload1.PostedFile.InputStream))
{
xmlFile = inputStreamReader.ReadToEnd();
}
XmlTextReader reader = new XmlTextReader(new StringReader(xmlFile));
DataSet dataSet = new DataSet();
dataSet.ReadXml(reader);
//gv1.DataSource = dataSet.Tables[“GridView”]; // Doesn’t work
gv1.DataSource = dataSet.Tables[0];
gv1.DataBind();
}
}
}
}
最终,我想创建一个更通用的组件,它允许我们将任何网格数据保存到用户的桌面,并在以后将该“快照”推回到网格中。提前感谢任何指导(这是我的第一篇文章)!