XML是目前在Web上应用很普遍的一项技术,而在.NET 2.0中,则提供了更为丰富的功能,使得在创建XML应用的时候更加得心应手。在本文中,将简单以一个例子来说明,.NET 2.0在创建XML应用时的一些新特性。
首先,我们平常在创建Web应用时,都会选择以数据库的形式来存贮数据的,但如果要以纯XML来存贮数据的话,那的确会是种挑战。在.NET 1.0/1.1框架中,对XML的支持功能有限,比如对同一应用中的多个XML文件的支持。在.NET 2.0中,这种情况得到了改变,增加了新的功能,比如:
1、Datatable现在可以读和写XML数据了
2、使用DatGridView控件,可以让你在dataset里,展示来自不同表的数据。
下面我将以一个Web应用的例子来说明这些新的特性。在这个程序中我将所有的数据都存储在XML文件中。展示了如何同时在dataset里,读和写多个XML文件,以及如何将XML文件绑定到datagridview控件;并且展示了datagridview控件如何从XML文件中读和写数据,如何在多个XML文件中寻找数据。这些新功能,都是以往的.net中做不到的。
任务跟踪应用
接下来,我们将创建一个实现"任务跟踪"的Web应用程序。这个应用程序其实很简单,是可以帮助大家跟踪一些任务和活动的进展情况。它需要创建两个xml文件:activities.xml和tasks.xml文件。Activites文件存放了日常的活动,包括每次活动需要完成些什么任务,任务的描述,开始和结束的时间。Tasks文件存放的是任务的类型,比如浏览email,编写程序,阅读书本等。下图显示了这两个文件之间的数据结构。
|
Column | Name | Property |
1 | activityid | DataType=System.Int32 Autoincrement=True AutoincrementSeed=1 AutoincrementStep=1 Unique=True |
2 | taskid | DataType=System.Int32 |
3 | description | DataType=System.String |
4 | startime | DataType=System.DateTime |
5 | endtime | DataType=System.DateTime |
Column | Name | Property |
1 | taskid | DataType=System.Int32 Autoincrement=True AutoincrementSeed=1 AutoincrementStep=1 Unique=True AllowDBNull=False |
2 | task | DataType=System.String AllowDBNull=False |
|
|
Column | Property |
activityid | Visible=False |
Taskid | ColumnType= DataGridViewComboBoxColumn DataSource= DsActivitiesTasks DataMember= tasks.task ValueMember=tasks.taskid |
description | Width=180 |
If CheckFileExistence() Then LoadDataSet() Else ’如果两个xml文件不存在,则创建这两个xml文件 CreateXMLFile() End If |
Dim myDocumentsFolder As String = My.Computer.FileSystem.SpecialDirectories.MyDocuments Dim activitiesFileName As String = "\Activities.xml" Dim tasksFileName As String = "\Tasks.xml" Public activitiesFile As String = String.Concat(myDocumentsFolder, activitiesFileName) Public tasksFile As String = String.Concat(myDocumentsFolder, tasksFileName) |
Public Function CheckFileExistence() As Boolean ’检查两个xml文件是否存在 If My.Computer.FileSystem.FileExists(activitiesFile) And _ My.Computer.FileSystem.FileExists(tasksFile) Then Return True Else Return False End If End Function Public Sub CreateXMLFile() DsActivitiesTasks.Tasks.AddTasksRow("Email") DsActivitiesTasks.Tasks.AddTasksRow("Browsing") DsActivitiesTasks.Tasks.WriteXml(tasksFile, System.Data.XmlWriteMode.WriteSchema) DsActivitiesTasks.activities.WriteXml(activitiesFile, System.Data.XmlWriteMode.WriteSchema) End Sub |
Public Sub LoadDataSet() DsActivitiesTasks.tasks.ReadXml(tasksFile) DsActivitiesTasks.activities.ReadXml(activitiesFile) End Sub |
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnSave.Click Me.DsActivitiesTasks.activities.AcceptChanges() Me.DsActivitiesTasks.activities.WriteXml(activitiesFile, System.Data.XmlWriteMode.WriteSchema) End Sub Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnDelete.Click Me.DataGridView1.Rows.RemoveAt(Me.DataGridView1.CurrentRow.Index) btnSave_Click(sender, e) End Sub |
|
DataGridView1.DataSource = frmActivities.DsActivitiesTasks DataGridView1.DataMember = frmActivities.DsActivitiesTasks.tasks.TableName |
frmActivities.DsActivitiesTasks.tasks.AcceptChanges() frmActivities.DsActivitiesTasks.tasks.WriteXml(frmActivities.tasksFile, _ System.Data.XmlWriteMode.WriteSchema) |
Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click Me.DataGridView1.Rows.RemoveAt(Me.DataGridView1.CurrentRow.Index) btnSave_Click(sender, e) End Sub |
Dim frmtasks As New frmEditAddTasks frmtasks.ShowDialog() |
|