如何使用xmlDataSourse将xml元素绑定到GridView?

时间:2014-04-30 12:18:16

标签: c# asp.net xml gridview xpath

我有一个服务以字符串格式返回xmlData:

    <CourseSearchDataSet xmlns="http:/www.tempuri.org/CourseSearchDataSet.xsd">
     <Course>
       <CourseId>9e980791</CourseId>
       <CourseName>Library and Information Solutions</CourseName>
       <CourseDesc>Overview of Library</CourseDesc>
     </Course>
     <Course>
       <CourseId>f3e59e56</CourseId>
       <CourseName>Power Link Intro</CourseName>
       <CourseDesc>This course</CourseDesc>
     </Course>
</CourseSearchDataSet>

在运行时,我正在尝试使用xmlDataSource将此数据绑定到GridView。

我在设计时定义了一个grid和dataSource:

<asp:GridView runat="server" ID="grdCourses" XPath="Course/">
            <Columns>
                <asp:TemplateField HeaderText="Id">
                    <ItemTemplate>
                          <%# XPath("CourseId") %>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    <asp:XmlDataSource runat="server" ID="xmlDataSource"></asp:XmlDataSource>

在设计时我将数据分配给xmlDataSource并将xmlDataSource分配给grid:

 xmlDataSource.EnableCaching = false;
        xmlDataSource.DataFile =  courseList;
        grdCourses.DataSourceID = "xmlDataSource";

(“courseList”是一个保存服务结果的字符串。)

网格已绑定到xmldDataSource,但它没有显示CourseId(在templateField中定义的字段,没有错误,只有空白列。

我指的是这个教程:http://goo.gl/mUHkYm 我不想使用DATASET,因为它很乱,需要手动处理很多事件。

任何帮助都将受到高度赞赏。

提前致谢。 维沙尔

2 个答案:

答案 0 :(得分:0)

我认为这只是导致问题的命名空间,请尝试以下代码。

 protected void Page_Load(object sender, EventArgs e)
        {
            XPathDocument document = new XPathDocument(@"D:\xxxx\xxx\xx\xxx\test.xml");
            XPathNavigator navigator = document.CreateNavigator();
            XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
            manager.AddNamespace("bk", "http:/www.tempuri.org/CourseSearchDataSet.xsd");
        } 

ASPX:

<form id="form1" runat="server">
    <div>
    <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="/test.xml">
</asp:XmlDataSource>
    <asp:GridView runat="server" ID="grdCourses" AutoGenerateColumns="false" XPath="bk:courseSearchDataSet/bk:Course" DataSourceID="XmlDataSource1">
            <Columns>
                <asp:TemplateField HeaderText="Id">
                    <ItemTemplate>
                          <%# XPath("CourseId") %>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>       
    </div>
    </form>

答案 1 :(得分:0)

如果您有XML字符串数据而不是XML文件,则应通过设置XmlDataSource属性而不是Data将XML字符串绑定到DataFile

xmlDataSource.EnableCaching = false;
xmlDataSource.Data =  courseList;
grdCourses.DataSourceID = "xmlDataSource";
dataSource.XPath = "....";
dataSource.DataBind();

相关问题:ASP.NET 3.5 bind to XML string