应用程序设计技术_第1页
应用程序设计技术_第2页
应用程序设计技术_第3页
应用程序设计技术_第4页
应用程序设计技术_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ASP.NET程序设计程序设计12022-4-23Web Web 应用程序设计技术应用程序设计技术ASP.NETASP.NET匡芳君匡芳君ASP.NET程序设计程序设计22022-4-23Web 应用程序设计技术ASP.NETn第第1章章 ASP.NET 概述及运行环境的构建概述及运行环境的构建n第第2章章 ASP.NET页面基础页面基础n第第3章章 VB.NET程序设计程序设计n第第4章章 服务器控件服务器控件n第第5章章 数据验证控件数据验证控件n第第6章章 ADO.NET数据库操作数据库操作n第第7章章 数据绑定技术及应用数据绑定技术及应用n第第8章章 ASP.NET的内置对象的内置对象

2、n第第9章章 文件及文件夹操作文件及文件夹操作n第第10章章 ASP.NET应用程序的环境配置应用程序的环境配置ASP.NET程序设计程序设计32022-4-23数据绑定技术n在前面重点讲解了连接数据库、查询记录、插入在前面重点讲解了连接数据库、查询记录、插入记录、更新记录和删除记录及其语法。尽管大家记录、更新记录和删除记录及其语法。尽管大家已经完成了对数据库的基本操作,但是上面的示已经完成了对数据库的基本操作,但是上面的示例存在如下不足。例存在如下不足。n查询记录的时候是自己手工输出到表格中,非常查询记录的时候是自己手工输出到表格中,非常烦琐,没有利用烦琐,没有利用 ASP.NET的数据绑定

3、控件的特的数据绑定控件的特性。性。n在插入记录时,一般是在表单中输入内容,然后在插入记录时,一般是在表单中输入内容,然后保存到数据库中,这样才能真正地动态增加。更保存到数据库中,这样才能真正地动态增加。更新记录也是这样,需要在表单中输入新的内容。新记录也是这样,需要在表单中输入新的内容。 ASP.NET程序设计程序设计42022-4-23数据绑定技术n考虑到以上问题,考虑到以上问题, ASP.NET提供了数据应用的数提供了数据应用的数据绑定控件据绑定控件DataGrid、DataList、Repeater控件。控件。nASP.NET的的Repeater,DataList,and DataGri

4、d 都是服务器端控件。这些控件将数据集都是服务器端控件。这些控件将数据集合表现为基于合表现为基于HTML的界面。的界面。ASP.NET程序设计程序设计52022-4-23DataGrid控件nDataGrid控件是一个多二维的数据网格,用来以表格形控件是一个多二维的数据网格,用来以表格形式显示数据源数据和以列为单位,设定各列的操作类型。式显示数据源数据和以列为单位,设定各列的操作类型。网格中的网格中的每一行表示数据源中的一个记录每一行表示数据源中的一个记录,每一列表示数每一列表示数据源中的据源中的 个字段(列)个字段(列)。从显示格式和操作控制能力看,。从显示格式和操作控制能力看,DataGr

5、id控件支持选择、编辑、删除、分页显示和排序控件支持选择、编辑、删除、分页显示和排序等功能。等功能。n可在设计时使用可在设计时使用“属性生成器属性生成器”对话框进行大量的自定义对话框进行大量的自定义设置,生成显示和编辑数据的列(包含设置,生成显示和编辑数据的列(包含“编辑编辑”、“更更新新”、“取消取消”和和“选择选择”按钮的列、自定义按钮的列以按钮的列、自定义按钮的列以及模板列)。然后可在模板编辑模式下布局模板列。及模板列)。然后可在模板编辑模式下布局模板列。ASP.NET程序设计程序设计62022-4-23使用DataGrid控件基本过程 (1)首先通过)首先通过DataSource属性指

6、定数据源;属性指定数据源; (2)指定要操作的数据表及关键字段;)指定要操作的数据表及关键字段; (3)设置)设置DataGrid控件的外观显示布局(包括控件的外观显示布局(包括颜色、字体、字号、边框、分页、排序、不同列颜色、字体、字号、边框、分页、排序、不同列的显示与操作类型等);的显示与操作类型等); (4)用)用DataBind()方法绑定数据;()方法绑定数据;ASP.NET程序设计程序设计72022-4-23DataGrid控件基本语法nasp DataGrid id=”控件名称控件名称”n Headerstyle-BackColor=”颜色值,表示标题栏背景颜色。颜色值,表示标题栏

7、背景颜色。n Width=”宽度值,可以使用像素值或百分比宽度值,可以使用像素值或百分比”n OnEditCommand”单击编辑按钮时的事件名称单击编辑按钮时的事件名称”n OnUpdateCommand”单击更新按钮时的事件名称单击更新按钮时的事件名称”n OnCancelCommand”单击取消按钮时的事件名称单击取消按钮时的事件名称”n OnDeleteCommand”单击删除按钮时的事件名称单击删除按钮时的事件名称”n OnltemCommnd”单击其他按钮时的事件名称单击其他按钮时的事件名称”n DataKeyField”关键字段,类似于数据库中的主键关键字段,类似于数据库中的主键

8、”n AutOGenerateColumns”True|False,是否自动产生每一列,是否自动产生每一列“n runat=”server”/ASP.NET程序设计程序设计82022-4-23DataGrid控件的语法n将数据绑定到将数据绑定到DataGrid控件的语法:控件的语法:DataGrid 控件名称控件名称.DataSource=数据对象数据对象 指定的数据源指定的数据源DataGrid 控件名称控件名称.DataBind()()执行绑执行绑定定n将数据对象绑定到将数据对象绑定到DataGrid控件后,它就会根控件后,它就会根据其中的字段自动产生每一列。当然,也可以令据其中的字段自动

9、产生每一列。当然,也可以令AutOGenerateColumns”False”,然后手,然后手工生成每一列。工生成每一列。ASP.NET程序设计程序设计92022-4-23ASP.NET程序设计程序设计102022-4-23DataGrid控件主要属性nDataGrid控件主要属性,其中标有控件主要属性,其中标有“*”和和“*”标标识的属性在显示格式设计等方面起重要作用,尤识的属性在显示格式设计等方面起重要作用,尤其是其是“*”标识的属性,可以使标识的属性,可以使 DataGrid控件为控件为不同的内容设置样式。设置不同的内容设置样式。设置 ShowFooter和和ShowHeader属性,也

10、可以显示或隐藏控件页脚属性,也可以显示或隐藏控件页脚和页眉。和页眉。n通过正确设置以上属性值,可以确定通过正确设置以上属性值,可以确定DataGrid控控件中的显示行数(分页)和记录显示顺序(排件中的显示行数(分页)和记录显示顺序(排序),也可以确定序),也可以确定DataGrid控件的列和数据源中控件的列和数据源中字段的顺序等。字段的顺序等。ASP.NET程序设计程序设计112022-4-23列类型n DataGrid控件允许以各种方式指定要显示的列。控件允许以各种方式指定要显示的列。默认情况下,列基于数据源中的字段自动生成。默认情况下,列基于数据源中的字段自动生成。但是,为了更精确地控制列

11、的内容和布局,可以但是,为了更精确地控制列的内容和布局,可以定义列的类型(不同的列类型决定控件中各列的定义列的类型(不同的列类型决定控件中各列的行为)。行为)。 ASP.NET程序设计程序设计122022-4-23列类型ASP.NET程序设计程序设计132022-4-23ASP.NET程序设计程序设计142022-4-236-5.aspxn下面将下面将DataReader对象绑定到对象绑定到DataGrid控件控件nMyDataGrid.DataSource = dr 指定数据源指定数据源nMyDataGrid.DataBind() 执行绑定执行绑定n定义定义DataGrid控件控件nn与与6

12、-1比较,在显示纪录时简单。缺点是每一栏比较,在显示纪录时简单。缺点是每一栏的标题是字段名。的标题是字段名。ASP.NET程序设计程序设计152022-4-236-6.aspxn建立建立DataSet对象对象nDim ds As New DataSet()n填充填充DataSet对象对象nadp.Fill(ds, link) n绑定数据对象绑定数据对象nMyDataGrid.DataSource=DS.Tables(link).DefaultView 指定数据源指定数据源nMyDataGrid.DataBind() 执行绑定执行绑定ASP.NET程序设计程序设计162022-4-23程序分析n

13、建立建立DataSet对象后,断开数据库连接。对象后,断开数据库连接。n填充填充DataSet对象,对象,adp.Fill(ds, “link”) 是将查是将查询的数据存放到询的数据存放到DataSet对象的一个对象的一个“link”表中,表中,这个表不是数据库的这个表不是数据库的 “link”表名,用户完全可表名,用户完全可以另取一个表名。以另取一个表名。n绑定数据对象绑定数据对象MyDataGrid.DataSource=DS.Tables(“link”).DefaultView 事将事将DataSet对象的对象的 “link”表默表默认的视图绑定到认的视图绑定到DataGrid。ASP.

14、NET程序设计程序设计172022-4-23动态在线插入6-7.ASPXn插入不同控件的输入值。插入不同控件的输入值。nDim strSql As StringnstrSql=Insert Into link(sitename,URL,intro,grade,submit_date) Values( & sitename.Text & , & URL.Text & , & intro.Text & , & ) & ,# & Now() & #)nDim cmd As New OleDbCommand(strSql,

15、 conn)n执行操作,插入记录执行操作,插入记录nconn.open() 打开数据库打开数据库1.cmd.ExecuteNonQuery()ASP.NET程序设计程序设计182022-4-23更新纪录6-8.aspxn当单击当单击“编辑编辑”时,就会调用时,就会调用OnEditCommand事件过程,相应的行的每一个字段就会显示为一事件过程,相应的行的每一个字段就会显示为一个文本框,就可以在其中输入更新内容。个文本框,就可以在其中输入更新内容。n 输入完毕,单击输入完毕,单击“更新更新”时,就会调用时,就会调用OnUpdateCommand事件过程,然后就用文本事件过程,然后就用文本框中的内

16、容更新记录。框中的内容更新记录。n 单击单击“取消取消”,就会调用,就会调用OnCancelCommand事件过程,取消本次操作。事件过程,取消本次操作。ASP.NET程序设计程序设计192022-4-23更新纪录6-8.aspxn单击编辑时,执行该事件过程。单击编辑时,执行该事件过程。nSub MyDataGrid_Edit(Sender As Object, E As DataGridCommandEventArgs)nMyDataGrid.EditItemIndex = )返回选中的行号返回选中的行号nCall BindData()nEnd Subn单击取消时,执行该事件过程。单击取消时

17、,执行该事件过程。nSub MyDataGrid_Cancel(Sender As Object, E As DataGridCommandEventArgs)nMyDataGrid.EditItemIndex = -1nCall BindData()nEnd SubASP.NET程序设计程序设计202022-4-23执行更新n单击更新时,执行该事件过程。单击更新时,执行该事件过程。n Sub MyDataGrid_Update(Sender As Object, E As DataGridCommandEventArgs)n建立建立Connection对象对象nDim conn As New

18、 OleDbConnection(ProviderServer.Mappath(wwwlink.mdb)n建立建立Command对象对象nDim txtSiteName,txtURL,txtIntro,txtGrade As textbox 声明文本框控件变量声明文本框控件变量ntxtSiteNamentxtURLntxtIntrontxtGradenDim strSql As StringnstrSql=Update link Set sitename= & txtSiteName.Text & ,URL= & txtURL.Text & ,intro= &a

19、mp; txtIntro.Text & ,grade= & CInt(txtGrade.Text) & ,submit_date=# & Now() & # Where link_id= & )nDim cmd As New OleDbCommand(strSql, conn)n执行更新操作执行更新操作ASP.NET程序设计程序设计212022-4-23定义DataGridnnnnnASP.NET程序设计程序设计222022-4-23程序说明n在声明在声明 DataGrid控件时增加了控件时增加了EditCommandColumn列,并使用列,并

20、使用DataKeyField”link_id”指定了关键子段为指定了关键子段为linkid。ASP.NET程序设计程序设计232022-4-23程序说明先看先看Page_load过程过程If Not Page.IsPostBack Then相当于相当于If Not Page.IsPostBack =False Then,表表示示如果没有提交页面就调用数据绑定子程序如果没有提交页面就调用数据绑定子程序。顺。顺便强调一下,便强调一下,每一次提交表单后,首先要执行每一次提交表单后,首先要执行Page_load过程,然后再执何其他过程过程,然后再执何其他过程。ASP.NET程序设计程序设计242022

21、-4-23MyDataGrie_Edit()n单击编辑时,执行该事件过程。单击编辑时,执行该事件过程。n Sub MyDataGrid_Edit(Sender As Object, E As DataGridCommandEventArgs)n MyDataGrid.EditItemIndex = )nCall BindData()n End Subn)会返回选定行号,从)会返回选定行号,从0开始,赋给开始,赋给DataGrie的的EditItemIndex属性,页面上就会显示文本框。属性,页面上就会显示文本框。ASP.NET程序设计程序设计252022-4-23单击取消MyDataGrid_

22、Cancel()n单击取消时,执行该事件过程。重新绑定数据,单击取消时,执行该事件过程。重新绑定数据,取消操作。取消操作。nSub MyDataGrid_Cancel(Sender As Object, E As DataGridCommandEventArgs)n MyDataGrid.EditItemIndex = -1nCall BindData()n End Sub1.MyDataGrid.EditItemIndex = -1 重新绑定数据重新绑定数据源源 ASP.NET程序设计程序设计262022-4-23MyDataGrid_Updaten单击更新时,执行该事件过程。单击更新时,执

23、行该事件过程。n Sub MyDataGrid_Update(Sender As Object, E As DataGridCommandEventArgs)n建立建立Connection对象对象nDim conn As New OleDbConnection(ProviderServer.Mappath(wwwlink.mdb)n建立建立Command对象对象nDim txtSiteName,txtURL,txtIntro,txtGrade As textbox 声明文本框控件变量声明文本框控件变量ntxtSiteName=e.Item.Cells(2).Controls(0) 取回第取回第

24、2个储存格中的个储存格中的TextBoxntxtURLntxtIntrontxtGradenDim strSql As StringnstrSql=Update link Set sitename= & txtSiteName.Text & ,URL= & txtURL.Text & ,intro= & txtIntro.Text & ,grade= & CInt(txtGrade.Text) & ,submit_date=# & Now() & # Where link_id= & )1.Dim cmd

25、As New OleDbCommand(strSql, conn)ASP.NET程序设计程序设计272022-4-23DataListItemn一个指向一个指向TextBox 对象的变量对象的变量txtTemp,并传回,并传回DataListItem 中,因为中,因为DataListItem 是以表格的方式来呈是以表格的方式来呈现字段所以每一个现字段所以每一个DataListItem 都有一个都有一个Cells 集合,用集合,用来管理每笔资料所要显示的所有字段,而呈现每个字段的来管理每笔资料所要显示的所有字段,而呈现每个字段的控件被放置于控件被放置于 Cell 对象中;如下图所示:对象中;如下

26、图所示: ASP.NET程序设计程序设计282022-4-23综合示例nINDEX.ASPXnADD.ASPXASP.NET程序设计程序设计292022-4-23INDEX.ASPXnDim txtSiteName,txtURL,txtIntro,txtGrade As textbox 声明文本框控件变量声明文本框控件变量ntxtSiteNamentxtURLntxtIntrontxtGradeASP.NET程序设计程序设计302022-4-23nTryn执行更新操作执行更新操作nconn.open() ncmd.ExecuteNonQuery()nconn.close() nCatch Ex

27、p n message.Text=发生错误,没有正常更新记录发生错误,没有正常更新记录nEnd TryASP.NET程序设计程序设计312022-4-23数据源数据源n要将控件和数据源进行连接,最简单的方式就是直接把数据指定给控件的某个属性,或者是使用数据连接说明,可以让控件取得数据源的数据,只要在控件中需要数据源提供数据的地方插入%# % 即可。ASP.NET程序设计程序设计322022-4-23例子(1)nnASP:Label Id=Label1 Text= Runat=Server/nnDim strMsg As StringnSub Page_Load(Sender As Object

28、, e As EventArgs)nstrMsg = “这是一个简单的数据源连接范例nLabel1.DataBind()nEnd SubnnASP.NET程序设计程序设计332022-4-23例子(2)6-12(1).aspxnnASP:Label Id=Label1 Text=nRunat=Server/nnSub Page_Load(Sender As Object, e As EventArgs)nPage.DataBind()nEnd SubnPublic Function Squ(intA)nReturn (intA*intA).ToStringnEnd FunctionnnASP.

29、NET程序设计程序设计342022-4-236-12.aspxnnnn请输入您的血型请输入您的血型:nASP:ListBox Id=ListBox1 DataSource= Rows=4 Runat=Server/nnnnnDim arA() As String = A,B,O,ABnSub Page_Load(Sender As Object, e As EventArgs)nPage.DataBind()nEnd SubnASP.NET程序设计程序设计352022-4-236-13.aspxnnn请选择您的兴趣请选择您的兴趣:nnASP:CheckBoxList Id=CheckBoxLi

30、st1 DataSource= Runat=Server/nnnnnDim alA As ArrayList = New ArrayListnSub Page_Load(Sender As Object, e As EventArgs)nalA.Add(爬山爬山)nalA.Add(打球打球)nalA.Add(计算机计算机)nalA.Add(音乐音乐)nPage.DataBind()nEnd SubnASP.NET程序设计程序设计362022-4-236-14.aspxnnnn请选择居住城市请选择居住城市:nnnnnnDim alA As ArrayList = New ArrayListnSu

31、b Page_Load(Sender As Object, e As EventArgs)nDim alA As ArrayList = New ArrayList nalA.Add(杭州市杭州市)nalA.Add(上海市上海市)nalA.Add(北京市北京市)nalA.Add(南京市南京市)nalA.Add(苏州市苏州市)nddlA.DataSource=alA nPage.DataBind()nEnd SubnnASP.NET程序设计程序设计372022-4-23DataGrid控件的高级功能n将进一步探讨将进一步探讨DataGrid控件的高级功能,包括分控件的高级功能,包括分页显示数据、

32、排序、定制列、到详细页、自定义页显示数据、排序、定制列、到详细页、自定义列。列。n如果把成千上万条记录显示在一个页面上,既不如果把成千上万条记录显示在一个页面上,既不方便测览,显示速度也会比较慢。方便测览,显示速度也会比较慢。n最好采用分页显示数据。也就是每页只显示若干最好采用分页显示数据。也就是每页只显示若干条记录。条记录。 n7-1.aspx(分页显示数据)分页显示数据)ASP.NET程序设计程序设计382022-4-23分页显示n要分页显示数据,必须要在要分页显示数据,必须要在DataGrid控件中添加控件中添加如下属性:如下属性: AllowPaging”True” 表示允许分页显示表

33、示允许分页显示 Pagesize=整数值整数值 每页显示多少条每页显示多少条记录记录 OnPagelndexChanged”事件过程事件过程” 切切换到另一页时的事件过程换到另一页时的事件过程ASP.NET程序设计程序设计392022-4-23Pagerstyle属性n还可以利用还可以利用Pagerstyle属性设置分页导航栏的样式:属性设置分页导航栏的样式: Pagerstyle-Mode” NextPrev|NumericPages”显示显示为下一页或数字为下一页或数字 Pagerstyle-HorlzontalAlign”Left| Right|center”水水平对齐方式平对齐方式 P

34、agerstyle-PrevPageText=字符串字符串显示为显示为“上一页上一页”时的文字时的文字 Paperstyle-NextPageText=字符串字符串显示为显示为“下一页下一页”时的文字时的文字ASP.NET程序设计程序设计402022-4-237-1(0).aspxASP.NET程序设计程序设计412022-4-23对数据动态排序n 我们学过在我们学过在 Select语句中用语句中用 Order By就可以按字段排序。就可以按字段排序。但是,利用但是,利用 DataGrid控件可以实现动态地按任意字段排控件可以实现动态地按任意字段排序。序。n要进行排序,必须要在要进行排序,必须

35、要在DataGrid控件中添加如下属性:控件中添加如下属性: AllowSOrting”True” 表示允许排序表示允许排序 OnsortCommand”事件过程事件过程” 排序对应的事件排序对应的事件过程过程n排序的中心思想是当单击排序的中心思想是当单击DataGrid某一列的标题时,就某一列的标题时,就将这一列的字段名称赋值给将这一列的字段名称赋值给Dataset对象默认视图的对象默认视图的Sort属性,然后就可以按该列排序了。属性,然后就可以按该列排序了。n7-2(0).aspxASP.NET程序设计程序设计422022-4-237-2(0).aspx程序解释nDim SortField

36、 As String 定义一个变量,用来存放排定义一个变量,用来存放排序字段序字段nSub Page_Load(Sender As Object, E As EventArgs)nIF Not Page.IsPostBack ThennSortField=link_id 第一次启动页面时,令排序字第一次启动页面时,令排序字段为段为link_id nCall BindData() 绑定数据绑定数据nEnd If1.End SubASP.NET程序设计程序设计432022-4-23程序解释n单击某一列的标题时执行该过程单击某一列的标题时执行该过程nSub MyDataGrid_Sort(Sende

37、r As Object, E As DataGridSortCommandEventArgs) nSortField=E.SortExpression 令排序字段为选择的字段令排序字段为选择的字段nBindData() 绑定数据绑定数据 1.End SubASP.NET程序设计程序设计442022-4-23定制列n 在前面的例子中大都是让在前面的例子中大都是让DataGrid控件按照数据库中的控件按照数据库中的宇段自动产生每一列,宇段自动产生每一列, 其实也可以自己定制每一列,包其实也可以自己定制每一列,包括每一列的显示内容、顺序和样式等。括每一列的显示内容、顺序和样式等。n要自己定制列,首先

38、需要在要自己定制列,首先需要在DataGrid控件中添加如下属控件中添加如下属性:性: AutoGenerateColumns”False”表示不允许自动产生表示不允许自动产生列列n 此外,还需要自己添加此外,还需要自己添加 BoundColumn、HypelinkColumn列。列。n7-3.aspxASP.NET程序设计程序设计452022-4-237-3.aspxnnnnnnnnnASP.NET程序设计程序设计462022-4-23HyperLinkColumnnASP.NET程序设计程序设计472022-4-23自定义列n前面讲述了如何在前面讲述了如何在DataGrid中定制列。事实上

39、,还可以中定制列。事实上,还可以利用利用TemplateColumn更加自由地定义每一列。更加自由地定义每一列。 asp: TemplateColumn ItemTemplate 服务器控件服务器控件 在其中设置显示记录时的控件在其中设置显示记录时的控件 /ItemTemplate EditltemTemplate 服务器控件服务器控件 在其中设置编辑记录时的控件在其中设置编辑记录时的控件 /EditltemTemplate /asp:TemplateColumnASP.NET程序设计程序设计482022-4-23程序解释nASP.NET程序设计程序设计492022-4-23程序解释nnnAS

40、P.NET程序设计程序设计502022-4-23程序解释nnnasp:HyperLink nText= NavigateUrl= Target=_blank runat=server/nASP.NET程序设计程序设计512022-4-23DataList控件存取数据库nDataGrid控件只能以表格形式显示数据,控件只能以表格形式显示数据,DataList控件可以更自由的方式显示数据,比如控件可以更自由的方式显示数据,比如可以在可以在1行显示多条记录。不过它的功能没有行显示多条记录。不过它的功能没有DataGrid强大,如不支持分页和排序等。强大,如不支持分页和排序等。ASP.NET程序设计程序设计522022-4-23DataList控件基本语法n DataList控件也可以绑定数据库中,并可以利用它来更控件也可以绑定数据库中,并可以利用它来更新和删新和删 除纪录。基本语法如除纪录。基本语法如 asp:DataList id”控

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论