65.9K
CodeProject 正在变化。 阅读更多。
Home

在 XML 数据文件中编写 LINQ 查询:VB.NET(VS2008)中的分步说明

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.91/5 (5投票s)

2008 年 6 月 2 日

CPOL

2分钟阅读

viewsIcon

73406

downloadIcon

527

在 XML 文件上使用 VB.NET LINQ 查询。

引言

我需要创建一个 Web 项目的工作原型。我模拟了屏幕,在 XML 文件中创建了一些虚拟数据,并在屏幕上显示出来。现在,我想处理这些数据(查询 XML 文件并在其他屏幕上呈现)。我知道这可以通过 LINQ 来实现。我在网上搜索了一些代码片段。我能够找到一些帮助,但不得不花费大量时间。这促使我发布这个主题。希望它对一些初学者有所帮助。

使用代码

包含一个 Zip 文件,其中包含两个 ASP 页面和一个 XML 文件。随意使用它们。我不会在这里解释任何内容。相反,我将向您展示创建项目的逐步过程,您可以查看代码。

打开 VS 2008。通过选择 ASP.NET Web 网站模板创建一个新的 Web 项目。我将项目命名为“LinqDemo”。选择语言为“VisualBasic”和 .NET Framework 3.5。

删除default.aspx页面。添加一个新窗体Employee.aspx,并将其设置为起始页。修改Employee.aspx页面的代码,使其显示如下:

Employee.aspx:

Employee.xml文件添加到项目中的App_Data文件夹。修改文件以显示如下数据:

修改Employee.aspx.vb文件以显示以下代码:

Partial Class Employee
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, _
              ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            BindGrid()
        End If
    End Sub

    Private Sub BindGrid()
        Dim xmlDS As New XmlDataSource
        xmlDS.DataFile = "~/App_Data/Employee.xml"
        xmlDS.XPath = ".//Employee/ROW"
        gvEmployee.DataSource = xmlDS
        gvEmployee.DataBind()
    End Sub
End Class

此时,您应该能够构建并运行项目。您应该能够看到一个页面,其中包含网格中的员工数据。

单击“详细信息”按钮时,我们希望在新页面上显示一些数据。我没有做任何令人难以置信的事情。我只是在新页面上的网格中显示相同的数据。

添加一个新页面,并将其命名为EmpDetails.aspx。修改页面,使其显示如下:

EmpDetails.aspx:

修改Employee.aspx.vb以显示如下:

Employee.aspx.vb:

Partial Class Employee
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, _
              ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            BindGrid()
        End If
    End Sub

    Private Sub BindGrid()
        Dim xmlDS As New XmlDataSource
        xmlDS.DataFile = "~/App_Data/Employee.xml"
        xmlDS.XPath = ".//Employee/ROW"
        gvEmployee.DataSource = xmlDS
        gvEmployee.DataBind()
    End Sub

    Protected Sub gvEmployee_SelectedIndexChanged(ByVal sender As Object, _
              ByVal e As System.EventArgs) Handles gvEmployee.SelectedIndexChanged
        Session("EMPID") = gvEmployee.SelectedRow.Cells(0).Text
        Response.Redirect("EmpDetails.aspx")
    End Sub
End Class

修改EmpDetails.aspx.vb页面以显示如下:

EmpDetails.aspx.vb:

Partial Class EmpDetails
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, _
              ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            BindData()
        End If
    End Sub

    Private Sub BindData()
        Dim pk As Integer
        pk = CInt(Session("EMPID"))

        Dim xmlDS = XElement.Load(Request.PhysicalApplicationPath & _
                                  "/App_Data/Employee.xml")
        Dim query = From row In xmlDS.Elements Where _
                   (CType(row.Attribute("empno"), Integer) = pk) Select row

        For Each row As XElement In query
            lblEmpNo.Text = row.Attribute("empno")
            lblEmpName.Text = row.Attribute("ename")
            lblJob.Text = row.Attribute("job")
            lblHireDt.Text = row.Attribute("hiredate")
            lblSal.Text = row.Attribute("sal")
            lblDeptNo.Text = row.Attribute("deptno")
            lblDeptName.Text = row.Attribute("dname")
            lblLoc.Text = row.Attribute("loc")
        Next
    End Sub

    Protected Sub btnBack_Click(ByVal sender As Object, _
              ByVal e As System.EventArgs) Handles btnBack.Click
        Response.Redirect("Employee.aspx")
    End Sub
End Class

运行项目,您应该能够单击“详细信息”,这将显示 LINQ 返回的数据。

这是我发布的第一篇文章。评论对我的未来帖子会有所帮助。谢谢。

© . All rights reserved.