分享
 
 
 

ASP.NET2.0中创建基于XML的应用程序

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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,编写程序,阅读书本等。下图显示了这两个文件之间的数据结构。

通常,可能你会想通过手工来创建这两个xml文件,但实际上这是不提倡的,因为在vs.ne 2005中,可以通过dataset设计器来帮助你设计xml 文件的结构,允许你创建上图关系的xml 文件,下面具体来讲解下。

1) 打开Visual.net 2005 beta 2,新建一个windows应用程序,选择vb.net 语言,将这个工程命名为DTKXML,然后添加一个dataset类型的文件,将其命名为dsactivitiesTasks.。然后添加两个表,activities和tasks 表(见图1)。只需要在设计器界面上,右键点选鼠标,在弹出的菜单上选Add->datatable就可以了。

接着,对着每个表的表名,右键点鼠标,在弹出的菜单里选择Add->Column,为每个表增加列,其中,每个列的名称,属性和数据类型如下表所示:

Activites表

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

Tasks表

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

接下来,要为这两个xml文件建立关联,这是十分简单的。在activities和task表的设计视图状态下,鼠标右键点选,在弹出的菜单中选择"Add Relation",按照下图所示,设置两个文件的关联性。

2) 这个时候,我们可以设计应用的界面了。应用包括两个窗体,第一个窗体,允许用户处理关于活动的有关信息,第二个窗体,可以提供给用户对各类型的任务进行编辑。

将工程中默认的窗体改名为frmActivities,在工具箱中拖一个datagridview控件到窗体中。接着,注意选择控件右上角的smart tag标记,这时会出现一个菜单(如下图所示),选择dsActivitiesTasks(就是我们刚才创建的dataset类型文件)作为datagridview的数据源。

这时,在窗体下部的组件托盘中,你会发现visual studio添加了dsActivitiesTasks的实例,和另外一个组件叫dsActvitiesTasksBindingSource。实际上,你不需要Binding Source,只需要直接将dataset绑定到Datagridview控件,因此,选择这个bingding source控件并删除它。之后,再次使用smarttag的功能,再次选择dsActivitiesTasks做为数据源。

接下来,我们要对datagridview控件进行属性的设置,以将一些不需要显示的列隐藏,设置时,再次选smarttag标志,在弹出的菜单中选择"Edit Columns", 按如下表对其属性进行设置,

Column

Property

activityid

Visible=False

Taskid

ColumnType= DataGridViewComboBoxColumn

DataSource= DsActivitiesTasks

DataMember= tasks.task

ValueMember=tasks.taskid

description

Width=180

再往该窗体中添加3个按钮,名称分别是btnEditAddTasks, btnSave, btnDelete,则第一个窗体的界面设置完毕。

编写相关代码

编写代码时,分两个步骤:1、加载相关的数据,2、使用户能对数据进行增,删,保存。下面分步说明:

加载相关数据到datagridview控件中。

由于我们已经有了dataset类型的文件,因此我们可以由此创造出上述的两个文件,则应用程序第二次运行时,会先检查是否存在这两个xml文件。代码如下:

在form_load事件中写入

If CheckFileExistence() Then

LoadDataSet()

Else

’如果两个xml文件不存在,则创建这两个xml文件

CreateXMLFile()

End If

接着,定义一系列的变量,以存放两个xml文件的具体位置,如下代码:

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)

注意其中一个用法My.Computer.FileSystem.SpecialDirectories.MyDocuments返回当前计算机上"我的文档"的具体位置。这里,将两个文件保存到"我的文档"中去。并且用activitiesFile和tasksFile变量,保存两个xml文件实际存取的路径。接下来是相关几个过程的代码,如下所示

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

上面的createxmlfile过程,首先前两句代码往task的xml文件中增加一些样本数据,分别为email和browsing.接着的两句代码,是.net 2.0中新增加的功能,设置了一个重要的参数writeSchema,以便自动将数据保存到tasksfile和activitiesfile两个文件中,并且自动将xml 的schema模式保存起来,只有这样才能将两个文件之间的在数据表上对应的关系保存起来。

Public Sub LoadDataSet()

DsActivitiesTasks.tasks.ReadXml(tasksFile)

DsActivitiesTasks.activities.ReadXml(activitiesFile)

End Sub

上面是loaddataset过程,十分简单,分别读取两个xml文件。可以看到,在.net 2.0中,可以同时在一个dataset里加载多个xml文件,如上述所示。而在.net 1.1中,这是很难做到的。

保存和删除数据

在datagridview中,提供了给用户自动新增记录的功能,用户只需要将光标移动到新一行中就可以了。而当用户编辑了数据后,需要对其进行保存,这个时候需要编写一点代码。保存功能只需要调用writexml方法就可以了,同样,删除数据时,需要调用removeat方法就可以了。如下所示:

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

增加和编辑任务

我们要为btnEditAddTasks这个按钮编写相关代码,而我们新建一个窗体frmEditAddTasks,在这个窗体中,可以添加删除不同的任务。首先,拖拉一个datagridview控件,增加两个按钮分别命名为btnSave和btnDelete,如下图所示:

在load事件中,写入如下代码

DataGridView1.DataSource = frmActivities.DsActivitiesTasks

DataGridView1.DataMember = frmActivities.DsActivitiesTasks.tasks.TableName

以将datagridview绑定到dataset的tasks 文件中去。注意这时以frmActivities.DsActivitiesTasks的形式调用的,因为该dataset是在第一个窗体中frmActivities中设立的。

接着,为保存save按钮编写代码:

frmActivities.DsActivitiesTasks.tasks.AcceptChanges()

frmActivities.DsActivitiesTasks.tasks.WriteXml(frmActivities.tasksFile, _

System.Data.XmlWriteMode.WriteSchema)

而删除按钮delete的代码也一样简单:

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

最后,我们要记得,在frmActivities窗体的btnEditAddTasks按钮中,编写如下代码,以能够使用户点这个按钮时,可以弹出编辑任务task的窗口

Dim frmtasks As New frmEditAddTasks

frmtasks.ShowDialog()

运行代码

现在可以开始运行代码了。结果如下图所示:

这时,你可以点"Edit/add Tasks"按钮来添加不同的任务。也可以在这个窗体中,通过下拉框来选择每个活动中不同的任务,指定每个任务的描述,开始和结束时间,并对它们进行保存和删除,而这一切,全部是通过使用.NET 2.0中XML的新特性来实现的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有