将XML文件上传到ASP.net页面,将特定节点绑定到GridView(C#)

时间:2015-03-04 20:26:39

标签: c# asp.net xml gridview

我正在尝试创建一个包含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();
                    }
                }
            }
        }

最终,我想创建一个更通用的组件,它允许我们将任何网格数据保存到用户的桌面,并在以后将该“快照”推回到网格中。提前感谢任何指导(这是我的第一篇文章)!

0 个答案:

没有答案