TDBGrid控件中对多个记录的处理.doc_第1页
TDBGrid控件中对多个记录的处理.doc_第2页
TDBGrid控件中对多个记录的处理.doc_第3页
TDBGrid控件中对多个记录的处理.doc_第4页
TDBGrid控件中对多个记录的处理.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

TDBGrid控件中对多个记录的处理唐成斌 DELPHI的TDBGrid控件主要用来处理数据表,它的属性中有一个dgMultiSelect,若此属性设定为TRUE,则可以选中多个记录(可用CTRL鼠标左键选择多个记录)。对选中的多个记录可以有以下几种处理方式,比较简单的两种是:清除所有的选择记录可用DBGrid1.SelectedRows.Clear语句;删除所有的选择记录可用DBGrid1.SelectedRows.Delete语句。但如果想获得选中的所有记录的其他信息,比如,在单独的一个窗体中显示用户选择的记录的第一个字段的内容(如所有选择的姓名)如何处理呢?这就要使用书签功能了,下面是笔者编写的一个程序中的过程,来将用户选择的多个记录集中显示在另外一个窗体中(笔者使用的是DELPHI4),供参考使用procedure GetSelectedRecord(DataSet : TDataSet; FieldName : String;BookmarkList : TBookmarkList; Strings : TStrings);/这个过程中的参数分别为:数据表、字段名称、书签、用来保存所选字段内容的/字符串(用于将内容传递到另一个单独窗体中的TLIST控件中)varI: Integer;bm : TBookMark;beginStrings.Clear;with Dataset do beginDisableControls;bm := GetBookMark;try/每个选择的记录都有一个书签标志,这就为处理它们提供了条件for I := 0 to BookmarkList.Count - 1 do beginBookmark := BookmarkListI;Strings.Add(DataSet.FindField(fieldname).AsString);end;finallyGotoBookMark(bm);FreeBookMark(bm);EnableControls;end;end;end;调用举例:GetSelectedRecord(Table1, NAME, DBGrid1.SelectedRows, Form2.ListBox1.Items);TDBGrid主要属性及应用TDBGrid 部件是用于显示和编辑数据库表中的记录信息的重要部件,它是我们在程序设计过程当中要经常使用的、灵活地用于显示和编辑数据库表中的记录信息的一个强有力的工具。TDBGrid 具有很多重要的属性,我们可以在程序设计阶段和程序运行过程中进行设置。TDBGrid 部件的一些重要属性及其设置方法请参看联机帮助文件。TDBGrid部件中一些重要的属性是 Option 属性、DrawMode 属性和 DefaultDrawing 属性,我们重点对两个属性进行阐述。【Options属性】:它是 TDBGrid 部件的一个扩展属性,在程序设计阶段设置 Options 属性可以控制 TDBGrid 部件的显示特性和对事件的响应特性。Options 属性在 TDBGrid 部件的属性栏中显示时,它的前面带有一个“”标志,双击“”标志,便可以展开一个布尔型属性列表,用户可以逐个地修改其中的各个属性值,修改完毕后可以双击 Options 属性前的“”标志,使 TDBGrid部件的属性列表恢复到原来的显示状态。表1列出了 Options 属性中包含的所有的扩展属性项以及它们对 TDBGrid 部件的影响。表1 TDBGrid部件的 Options 属性中的扩展属性项属 性 名 取 值 及 影 响 dbEditing True: 缺省情况下为此值,确保用户能够在网格中编辑插入和删除数据库表中的记录 False:在网格中不能编辑、插入和删除表中的记录dbAlwaysShow True: 当用户选中记录中的一个字段时,自动地使该字段Editor True:处于编辑状态 False:缺省情况下为此值。当一个字段被选中,它不能自动变成编辑状态dgTitles True: 缺省情况下为此值。在网格的第一行中显示字段名或字段标题 False:在网格中不显示字段名或字段对应的标题dgIndicator True: 缺省情况下为此值。在网格的最左边用一个黑箭头标注当前记录指针所在的位置,在插入状态时,箭头变成星状,在编辑状时,箭头变成I头。 False:在网格中不标识当前记录指针的位置dgColumnResize True: 缺省情况下为此值。通过拖拉网格的垂直分隔线可以改变网格中各列的宽度,在具体操作时要拖拉各列中显示字段标题区域中的垂直分隔线。 False:网格中各列的宽度不能改变dgCloLines True: 缺省情况下为此值。在网格中显示各列之间的垂直分隔线。 False:在网格中不显示垂直分隔线dgRowLines True: 缺省情况下为此值。在网格中显示各行之间的水平分隔线。 False:在网格中不显示水平分隔线。dgTabs True: 缺省情况下为此值。可以在记录的各字段之间移动输入焦点(也即选择提示棒) False:不能在记录的名字段之间移动输入焦点,在网格中按Tab键时,直接跳出网格dgRowSelect True: 选择提示棒覆盖整条记录中的全部字段 False:缺省情况下为此值。选择提示棒一次只覆盖记录中的一个字段dgAlwaysShow True: 缺省情况下为此值。在网格始终显示选择提示棒,即-Selection 使其控件获得焦点时,也是如此。 False:只在当网格获得焦点时,才显示选择提示棒。dbConfirmDelete True: 缺省情况下为此值。当在网格中删除记录时,弹出确认信息。 False:在网格中删除记录时不弹出确认信息。用户想了解这些可选属性项的作用和影响,还可以参看联机帮助信息。【DragMode属性】:该属性有两个可选的属性值。当它的值被设置为dmManual时,在应用程序运行过程中,用户可以用鼠标拖放网格中的各列,改变各列在网格中的显示顺序和位置。当用鼠标拖放网格中的一列、改变它在网格中的位置时,只是改变了该列在数据集中的位置,并没有改变它对应的数据库表中的位置。当该属性的值被设置成dmAutomatic时,用户不能用鼠标拖放网格中的各列而改变它在网格中的位置。【DefalultDrawing属性】:该属性是布尔型属性,它用于控制网格中各网格单元的绘制方式。在缺省情况下,该属性的值为True,也就是说Delphi使用网格本身缺省的方法绘制网格中各网格单元,并填充各网格单元中的内容,各网格单元中的数据根据其对应的字段部件的DisplayFormat属性和EidtFormat属性进行显示和绘制。如果DefaulDrawing属性被设置为False时,Delphi不会自动地绘制网格中各网格单元和网格单元中的数据,用户必须自己为TDBGrid部件的OnDrawDataCell事件编写相应的程序用于绘制各网格单元和其中的数据。16.4.2 TDBGrid部件的事件及应用TDBGrid 部件在具有很多重要属性的同时,Delphi也为它赋予了一些事件,以用于控制用户在 TDBGrid 部件中的操作,我们通过为其中的一些事件编写处理程序,可以有效地控制TDBGrid部件的行为。因为在TDBGrid部件中一次是显示多条记录和记录中的多个字段,也许在实际应用中,不同的用户各有自己特殊的需要,如只想改变其中某一列的值或者控制用户每次只能进出网格中指定的列等等。表2列出了 TDBGrid 部件的主要事件及目的用途。表2 TDBGrid 部件中的主要事件事 件 名 目 的 用 途OnColEntor 当用户进入网格各列时,触发该事件OnColExit 当用户离开网格各列时,触发该事件OnDblClick 当用户在网格中双击鼠标左键时,触发该事件OnDragDrop 当用户在网格中用鼠标进行拖放操作时,触发该事件OnDragOver 当用户在网格中用鼠标拖动网格时,触发该事件OnDrawDataCell 用于定制绘制网格中各网格单元,当向网格中填充数据时触发该事件OnEndDrag 当用户停止拖动网格时,触发该事件OnEnter 当网格获得焦点时,触发该事件OnExit 当网格失去焦点时,触发该事件OnKeyDown 当用户在网格中按下任何键或组合键时,触发该事件OnKeyPress 当用户在网格中按了任何一个数字键或字母键时,触发该事件OnKeyUp 当用户在网格中释放任何被按下的键时,触发该事件 上述这些事件在我们开发实际的应用程序时,是很有用处的,读者们可以仔细地研究这些事件的用途,并参看联机帮助信息。procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;const Rect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);var i :integer;beginif gdSelected in State then Exit;/定义表头的字体和背景颜色: for i :=0 to (Sender as TDBGrid).Columns.Count-1 do begin (Sender as TDBGrid).Columnsi.Title.Font.Name :=宋体; /字体 (Sender as TDBGrid).Columnsi.Title.Font.Size :=9; /字体大小 (Sender as TDBGrid).Columnsi.Title.Font.Color :=$000000ff; /字体颜色(红色) (Sender as TDBGrid).Columnsi.Title.Color :=$0000ff00; /背景色(绿色) end;/隔行改变网格背景色:if Query1.RecNo mod 2 = 0 then (Sender as TDBGrid).Canvas.Brush.Color := clInfoBk /定义背景颜色else (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); /定义背景颜色/定义网格线的颜色: DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);with (Sender as TDBGrid).Canvas do /画 cell 的边框begin Pen.Color := $00ff0000; /定义画笔颜色(蓝色) MoveTo(Rect.Left, Rect.Bottom); /画笔定位 LineTo(Rect.Right, Rect.Bottom); /画蓝色的横线 Pen.Color := $0000ff00; /定义画笔颜色(绿色) MoveTo(Rect.Right, Rect.Top); /画笔定位 LineTo(Rect.Right, Rect.Bottom); /画绿色的竖线end;end; -procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);beginif (gdFocused in State) thenbegin if (Field.FieldName = DBComboBox1.DataField ) then begin DBComboBox1.Left := Rect.Left + DBGrid1.Left; DBComboBox1.Top := Rect.Top + DBGrid1.top; DBComboBox1.Width := Rect.Right - Rect.Left; DBComboBox1.Height := Rect.Bottom - Rect.Top; DBComboBox1.Visible := True; end;end;end;-procedure TForm1.DBGrid1ColExit(Sender: TObject);beginIf DBGrid1.SelectedField.FieldName = DBComboBox1.DataField then begin DBComboBox1.Visible := false; end;end;-在DbGrid的DrawColumnCell事件中编写如下代码:Case DataCol Mod 2 = 0 ofTrue: DbGrid1.Canvas.Brush.Color:= clBlue; file:/偶数列用蓝色False: DbGrid1.Canvas.Brush.Color:= clAqua; file:/奇数列用浅绿色End;DbGrid1.Canvas.Pen.Mode:=pmMask;DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);-Case DataCol Mod 2 = 0 ofTrue: DbGrid1.Canvas.Brush.Color:= clBlue; file:/偶数列用蓝色False: DbGrid1.Canvas.Brush.Color:= clAqua; file:/奇数列用浅绿色End;If (State = gdSelected) or (State=gdSelectedgdFocused) thenIf Not DbGrid1.SelectedRows.CurrentRowSelected thenDbGrid1.Canvas.Brush.Color:=clRed; file:/当前选中单元格显示红色DbGrid1.Canvas.Pen.Mode:=pmMask;DbGrid1.DefaultDrawColumnCell (Rect DataCol Column State);-设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色)在DbGrid的DrawColumnCell事件中编写如下代码:if (State = gdSelected) or (State=gdSelected gdFocused) thenDbGrid1.Canvas.Brush.color:=clRed; file:/当前行以红色显示,其它行使用背景的浅绿色DbGrid1.Canvas.pen.mode:=pmmask;DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);-if (State = gdSelected) or (State=gdSelectedgdFocused) thenbeginCase DataCol Mod 2 = 0 ofTrue : DbGrid1.Canvas.Brush.color:=clRed; file:/当前选中行的偶数列显示红色False: DbGrid1.Canvas.Brush.color:=clblue; file:/当前选中行的奇数列显示蓝色end;DbGrid1.Canvas.pen.mode:=pmmask;DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);end;-横向斑马线, 同时以红色突显当前行效果。file:/其它属性设置同3,将上述代码修改为:Case Table1.RecNo mod 2 = 0 of file:/根据数据集的记录号进行判断True : DbGrid1.Canvas.Brush.color:=clAqua; file:/偶数行用浅绿色显示False: DbGrid1.Canvas.Brush.color:=clblue; file:/奇数行用蓝色表示end;if (State = gdSelected) or (State=gdSelectedgdFocused) then file:/选中行用红色显示DbGrid1.Canvas.Brush.color:=clRed;DbGrid1.Canvas.pen.mode:=pmMask;DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);-双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。file:/其它属性设置同3,将上述代码修改为:Case Table1.RecNo mod 2 = 0 of file:/根据数据集的记录号进行判断True : DbGrid1.Canvas.Brush.color:=clAqua; file:/偶数行用浅绿色显示False: DbGrid1.Canvas.Brush.color:= clblue; file:/奇数行用蓝色表示end;If (State = gdSelected) or (State=gdSelectedgdFocused) thenCase DataCol mod 2 = 0 ofTrue : DbGrid1.Canvas.Brush.color:=clRed; file:/当前选中行的偶数列用红色False: DbGrid1.Canvas.Brush.color:= clGreen; file:/当前选中行的奇数列用绿色表示end;DbGrid1.Canvas.pen.mode:=pmMask;DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);-DBGrid不支持鼠标的上下移动的解决代码(感谢 wangxian11 提供)自己捕捉WM_MOUSEWHEEL消息处理privateOldGridWnd : TWndMethod;procedure NewGridWnd (var Message : TMessage);publicprocedure TForm1.NewGridWnd(var Message: TMessage);varIsNeg : Boolean;beginif Message.Msg = WM_MOUSEWHEEL thenbegin IsNeg := Short(Message.WParamHi) 0; if IsNeg then DBGrid1.DataSource.DataSet.MoveBy(1) else DBGrid1.DataSource.DataSet.MoveBy(-1)endelse OldGridWnd(Message);end;procedure TForm1.FormCreate(Sender: TObject);beginOldGridWnd := DBGrid1.WindowProc ;DBGrid1.WindowProc := NewGridWnd;end; -dbgrid中移动焦点到指定的行和列 dbgrid是从TCustomGrid继承下来的,它有col与row属性,只不过是protected的,不能直接访问,要处理一下,可以这样:Query1.first;TDrawGrid(dbgrid1).col:=1;dbgrid1.setfocus;-procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;Field: TField; State: TGridDrawState);begin if Table1.Fieldbyname(Salary).value=SpinEdit1.value then DBGrid1.Canvas.Brush.Color:=ColorGrid1.ForeGroundColor else DBGrid1.Canvas.Brush.Color:=ColorGrid1.BackGroundColor; DBGrid1.Canvas.FillRect(Rect); DBGrid1.Canvas.TextOut(Rect.left2,Rect.top2,Field.AsString);end;-1.为SpinEdit1构件的OnChange事件编写响应代码:procedure TForm1.SpinEdit1Change(Sender: TObject);begin DBGrid1.refresh; /刷新是必须的end;当SpinEdit1构件的值有所改变时,重新刷新DBGrid1。2.为ColorGrid1的OnChange事件编写响应代码:procedure TForm1.ColorGrid1Change(Sender: TObject);begin DBGrid1.refresh; /刷新是必须的 end;当ColorGrid1的值有所改变时,即鼠标的右键或左键单击ColorGrid1重新刷新DBGrid1。3.为Form1窗体(主窗体)的OnCreate事件编写响应代码:procedure TForm1.FormCreate(Sender: TObject);begin ColorGrid1.ForeGroundIndex:=9; ColorGrid1.BackGroundIndex:=15;end;-判断Grid是否有滚动条?if (GetWindowlong(Stringgrid1.Handle, GWL_STYLE) and WS_VSCROLL) 0 then ShowMessage(Vertical scrollbar is visible!);if (GetWindowlong(Stringgrid1.Handle, GWL_STYLE) and WS_HSCROLL) 0 then ShowMessage(Horizontal scrollbar is visible!);-1、 数据表的建立 在Delphi的工具菜单中选择Database desktop,在数据库DBDemos下建立一个名为example.db的数据表。数据表的字段和内容如下: Name Age Wage张山 25 500王武 57 1060李市 30 520刘牛 28 390 2、创建基于TDBGrid的TColoredDBGrid组件 在Delphi组件菜单中,选择New Component,在弹出对话框中作以下设置:Ancestor Type = TDBGridClass Name = TColoredDBGrid 然后单击OK按钮,Delphi自动完成组件基本框架的定义。增添OnDRawColoredDBGrid事件并使它出现在Object Inspector的Events中以便在应用程序中设定改变行颜色的条件。重载DrawCell方法,只能自己绘制单元格。不能通过在OnDrawColumnCell来设置颜色,因为在OnDrawColumnCell改变单元格的颜色会再次触发OnDrawColumnCell。 下面就是所创建组件的源程序 。 3、建立应用程序进行验证。 在Delphi文件菜单中选择New建立新的应用程序工程Project1和主窗体Form1,设置Form1的Caption属性为“控制DBGrid行颜色的示例”。在主窗体上添加Data Source、Table、Button和ColoredDBGrid组件。设置各组件的属性如下:Table1.Database=DBDemosTable1.Tablename=example.dbDatasource1.Dataset=Table1ColoredDBGrid1.Datasource=DataSource1Button1.Caption=退出 在ColoredDBGrid1的onDRawColoredDBGrid事件中输入下列代码,设定由Wage(工资)来决定在ColoredDBGrid1各行的颜色。procedure TForm1.ColoredDBGrid1 DRawColoredDBGrid (Sender: TObject; Field: TField; var Color: TColor; var Font: TFont);Var p : Integer;begin p := Table1.FindField(wage).AsInteger;/取得当前记录的Wage字段的值。 if (p = 500) And (p =800) then begin Color := clMaroon; Font.Style := fsBold; end;end;-unit NewDBGrid;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DB, Grids, DBGrids, Excel97;typeTDrawFieldCellEvent = procedure(Sender: TObject; Field: TField; var Color: TCOlor; var Font: TFont; Row: Longint) of object;/新的数据控件由 TDBGrid 继承而来TNewDBGrid = class(TDBGrid)private/私有变量 FWZebra: Boolean; /是否显示斑马颜色 FWFirstColor: TColor; /单数行颜色 FWSecondColor: TCOlor; /双数行颜色 FDrawFieldCellEvent: TDrawFieldCellEvent; procedure AutoInitialize; /自动初使化过程 procedure AutoDestroy; function GetWFirstColor: TColor;/FirstColor 的读写函数及过程 procedure SetWFirstColor(Value: TColor); function GetWSecondColor: TCOlor; procedure SetWSecondColor(Value: TColor); function GetWZebra: Boolean; procedure SetWZebra(Value: Boolean);protected procedure Scroll(Distance: Integer); override;/本控件的重点过程 procedure DrawCell(Acol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;public constructor Create(AOwner: TComponent); override; destructor Destroy; override;published property WZebra: Boolean read GetWZebra write SetWZebra; property OnDblClick; property OnDragDrop; property OnKeyUp; property OnKeyDown; property OnKeyPress; property OnEnter; property OnExit; property OnDrawDataCell; property WFirstColor: TColor read GetWFirstColor write SetWFirstColor; property WSecondColor: TColor read GetWSecondColor write SetWSecondColor;end;procedure Register;implementationprocedure Register;beginRegisterComponents(Data Controls, TNewDBGrid);end;procedure TNewDBGrid.AutoInitialize;beginFWFirstColor := RGB(239, 254, 247);FWSecondColor := RGB(249, 244, 245);可以在次添加需要的其它控件及初使化参数end;procedure TNewDBGrid.AutoDestroy;begin在这里释放自己添加参数等占用的系统资源end;procedure TNewDBGrid.SetWZebra(Value: Boolean);beginFWZebra := Value;Refresh;end;function TNewDBGrid.GetWZebra: Boolean;beginResult := FWZebra;end;function TNewDBGrid.GetWFirstColor: TColor;beginResult := FWFirstColor;end;procedure TNewDBGrid.SetWFirstColor(Value: TColor);beginFWFirstColor := Value;Refresh;end;function TNewDBGrid.GetWSecondColor: TColor;beginResult := FWSecondColor;end;procedure TNewDBGrid.SetWSecondColor(Value: TColor);beginFWSecondColor := Value;Refresh;end;constructor TNewDBGrid.Create(AOwner: TComponent);begininherited Create(AOwner);AutoInitialize;end;destructor TNewDBGrid.Destroy;beginAutoDestroy;inherited Destroy;end;/实现斑马效果procedure TNewDBGrid.DrawCell(ACol, ARow:Longint; ARect: TRect; AState: TGridDrawState);varOldActive: Integer;Highlight: Boolean;Value: string;DrawColumn: Tcolumn;cl: TColor;fn: TFont;begin如果处于控件装载状态,则直接填充颜色后退出if csLoading in ComponentState thenbegin Canvas.Brush.Color := Color; Canvas.FillRect(ARect); Exit;end;if (gdFixed in AState) and (ACol - IndicatorOffset 0) thenbegin inherited DrawCell(ACol, ARow, ARect, AState); Exit;end;对于列标题,不用任何修饰if (dgTitles in Options) and (ARow = 0) thenbegin inherited DrawCell(ACol, ARow, ARect, AState); Exit;end;if (dgTitles in Options) then Dec(ARow);Dec(ACol, IndicatorOffset);if (gdFixed in AState) and (dgRowLines, dgColLines * Options = dgRowLines, dgColLines) thenbegin缩减ARect,以便填写数据 InflateRect(ARect, -1, -1);endelse with Canvas do begin DrawColumn := ColumnsACol; Font := DrawColumn.Font; Brush.Color := DrawColumn.Color; Font.Color := DrawColumn.Font.Color; if FWZebra then /如果属性WZebra为True则显示斑马纹 if Odd(ARow) then Brush.Color := FWSecondColor else Brush.Color := FWFirstColor; if (DataLink = nil) or not DataLink.Active then FillRect(ARect) else begin Value := ; OldActive := DataLink.ActiveRecord; try DataLink.ActiveRecord := ARow; if Assigned(DrawColumn.Field) then begin Value := DrawColumn.Field.DisplayText; if Assigned(FDrawFieldCellEvent) then begin cl := Brush.Color; fn := Font; FDrawFieldCellEvent(self, DrawColumn.Field, cl, fn, ARow); Brush.Color := cl; Font := fn; end; end; Highlight := HighlightCell(ACol, ARow, Value, AState); if Highlight and (not FWZebra) then begin Brush.Color := clHighlight; Font.Color := clHighlightText; end; if DefaultDrawing then DefaultDrawColumnCell(ARect, ACol, DrawColumn, AState); if Columns.State = csDefault then DrawDataCell(ARect, DrawColumn.Field, AState); DrawColumnCell(ARect, ACol, DrawColumn, AState); finally DataL

温馨提示

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

评论

0/150

提交评论