UniGUI 之UniDBGrid(05)


UniGUI 之UniDBGrid(05)

目錄
1]DataSource設置
2]顯示MEMO類型里的文字
3]顯示懸浮提示
4]顯示當前記錄及總記錄數
5]讀取所有記錄,及分頁
6]在前面加上序號列
7]不顯示標題欄
8]列排序
9]編輯 和 更新 數據
10]獲得某單元格里的內容

11]標題別名

12]將某列設置為CheckBox格式

13]列標題下顯示過濾編輯框,自動對列數據進行過濾

14.1]右鍵刪除一條記錄

      14.2]右鍵刪除多條記錄

15]將UniDBGrid數據另存為網頁/CSV格式,導出

      15.2用uniGUI自帶控件導出為Excel的xlsx格式,只適合1534版本以上

16]自畫整行和單元格

17]UniDBGrid增加按鈕列

18]Argument out of range.錯誤

19]一行所有列的編輯RowEditor

20]隔行背景色設置StripeRows

21]不顯示Title按鈕

22]UniDBGrid當前列名/當前行總數/數據遍歷

23]設置標題行高,表頭設置

24]設置某列的左右對齊(不含標題)

25]設置某列為進度條顯示

26]unigui的dbgrid點擊列標題進行排序

27]遍歷選中行

28_UniDBGrid 實現分頁,下拉選擇每頁數據行數,pageSize

29unidbgrid 如何替換某個字段的顯示值 比如字段值為0的時候 顯示成功  1顯示不成功

30激活列頭末尾的排序菜單,運用UniDBGrid列頭實現排序

31單擊一單元格,即獲得焦點,並處於編輯狀態


1] 數據源DataSource設置為DataSource1


 2]  unidbgrid1.Columns[1].DisplayMemo:=true;  //顯示MEMO類型里的文字,不設置只會顯示(WIDEMEMO),不顯示文字內容。

 


3] unidbgrid1.Columns[1].ShowToolTip:=true;//當鼠標懸浮在某單元格上,在鼠標后面顯示單元格內容;

 


4]顯示當前記錄及總記錄數

  function pagingBar.beforeInit(sender, config)
{ config.displayInfo = true;}

然后 點右上角 的 Apply關閉。

 


5]讀取所有記錄,及是否  分頁。  WebOptions.FetchAll

 


 6]在前面加上序號列

方法1:Options

  方法二:

 在UniDBGrid的ExtEvents事件下加如下代碼:

sender.headerCt.insert(0,new Ext.grid.RowNumberer({text:'',width:'auto',align:'center',menuDisabled:false}));


7]不顯示標題欄;Options

  


8]排序 

 unidbgrid1.Columns[1].Sortable:= True;

 7中的標題欄要可見


9]編輯 和 更新 數據

0]

 

 放一個UniHiddenPanel,在里面加入編輯控件UniEdit3之類的

a)先將   wideMemo類型的要匹配 UniEdit,

 unidbgrid1.Columns[0].Editor:= UniEdit3;

 b)添加 過程

 

/雙擊修改數據
procedure TMainForm.UniDBGrid1SetCellValue(Sender: TObject; ACol, ARow: Integer;
  AField: TField; var Value: Variant);
begin
 self.UniDBGrid1.DataSource.DataSet.Edit;
  self.UniDBGrid1.DataSource.DataSet.FieldByName(self.UniDBGrid1.Columns.Items[Acol].FieldName).Value:=Value;
  self.UniDBGrid1.DataSource.DataSet.Post;
end;

 雙擊,修改后,回車,即可。


10]獲得某單元格里的內容。

在UniDBGrid1的OnCellClick事件里

procedure TMainForm.UniDBGrid1CellClick(Column: TUniDBGridColumn);
begin
   if Column.FieldName = 'info' then //列名
  unimemo1.Text:=  VarToStr(Column.Field.Value) ;//Column.Field.Valueo為單元格的內容
end;

在UniDBGrid1的OnCellContextClick事件里

procedure TMainForm.UniDBGrid1CellContextClick(Column: TUniDBGridColumn;
  X, Y: Integer);
begin
  n1.Caption:= '刪除  '+Column.Field.DataSet.FieldByName('aName').AsString;//單元格的內容

UniPopupMenu1.Popup(X, Y, UniDBGrid1); // 彈出 右鍵菜單,綁定UniDBGrid1

end;

11]標題別名

  UniDBGrid1.Columns[1].Title.Caption := '成語';

12]將某列設置為CheckBox格式

     

 左邊是最終結果,右邊是數據庫里 的數據。

     unidbgrid1.Columns[2].CheckBoxField.AutoPost:=True; //當用戶點選CheckBox后,改變前端顯示並根據該屬性決定:
                                                         //True—立即自動提交到數據集中並刷新前端顯示
                                                         //False—只改變前端顯示,當記錄滾動時再提交數據集
     unidbgrid1.Columns[2].CheckBoxField.BooleanFieldOnly:=False; //是否只針對Boolean字段,
                                                                 //True—只能識別Boolean字段,非Boolean字段將不能顯示CheckBox
                                                                 //False—DisplayValues和FieldValues可以針對非Boolean字段進行處理
     unidbgrid1.Columns[2].CheckBoxField.DisplayValues := 'Day;Night' ;   //DisplayValues存儲顯示文字  ,不設置 則 顯示 True/False;
     uniDBgrid1.Columns[2].CheckBoxField.Enabled:= True;       // 一定為True;False則 不顯示CheckBOx
     unidbgrid1.Columns[2].CheckBoxField.FieldValues:='0;1';    //FieldValues存儲字段值,


     unidbgrid1.Columns[2].Alignment := taLeftJustify;        //靠左 排列

13]列標題下顯示過濾編輯框,自動對列數據進行過濾

        a].放一個TUniHiddenPanel控件在窗體上,然后將TUniEdit等編輯控件放置在這個隱藏的Panel內;

       b]一定要手動右鍵手動添加列 ;

       c]設置要過濾的列的Filtering,將其Editor屬性設置對應的編輯控件

  FDQuery1.Open('select id,name,info from atb');

UniDBGrid1.Columns[0].FieldName:='id';

  UniDBGrid1.Columns[1].FieldName:='name';
  UniDBGrid1.Columns[1].DisplayMemo := true;
  UniDBGrid1.Columns[1].Filtering.ChangeDelay := 900;  //當用戶鍵入字符后,延時進行過濾處理的毫秒數
  UniDBGrid1.Columns[1].Filtering.Editor := UniEdit1;   //編輯控件 放在hidenPanel
  UniDBGrid1.Columns[1].Filtering.Enabled := true;   //Boolean是否允許進行過濾,一定為True;
  UniDBGrid1.Columns[1].Title.Caption:='成語';
  UniEdit1.CharEOL:=#13;  //表示回車 確定 開始  這很重要

  UniDBGrid1.Columns[2].FieldName:='info';
  UniDBGrid1.Columns[2].DisplayMemo := true;
  UniDBGrid1.Columns[2].Filtering.ChangeDelay := 900;
  UniDBGrid1.Columns[2].Filtering.Editor := UniEdit2;
  UniDBGrid1.Columns[2].Filtering.Enabled := true;
  UniDBGrid1.Columns[2].Title.Caption:='解釋';
  UniEdit2.CharEOL:=#13;

     d]回車后的事件還得自己寫。

procedure TMainForm.UniDBGrid1ColumnFilter(Sender: TUniDBGrid;  const Column: TUniDBGridColumn; const Value: Variant);
var    aFileterSQL: string;
begin
  aFileterSQL := 'select *  from atb  where 1=1 ';
  aFileterSQL:= aFileterSQL+' and ' + UniDBGrid1.Columns[1].FieldName
    + ' like ''%' + UniDBGrid1.Columns[1].Filtering.VarValue + '%''';
  aFileterSQL:= aFileterSQL+' and ' + UniDBGrid1.Columns[2].FieldName
    + ' like ''%' + UniDBGrid1.Columns[2].Filtering.VarValue + '%''';

    FDQuery1.Open(aFileterSQL);
end;

14]右鍵刪除一條記錄

      a]在MainModule的BrowserOptions.boDisableMouseRightClick設為True;//  不顯示網頁自帶的右鍵菜單,顯示自定義右鍵菜單

      b]添加右鍵菜單,放一個UniPopupMenu1在窗口上,並添加菜單aPopupMenu,並添加事件

    c]兩個設置

//菜單執行
procedure TMainForm.aaClick(Sender: TObject);
begin        //刪除該行
  MessageDlg('是否刪除該行?', mtConfirmation, mbYesNo,
    procedure(Sender: TComponent; Res: Integer)
    begin
      Case Res of
        mrYes: // 點Yes后執行的語句
          begin
               unidbgrid1.DataSource.DataSet.Delete;
          end;
        mrNo:   // 點No后執行的語句
          begin
            caption := 'mrNo'
          end;
      end;
    end);
end;

//c]將uniDBGrid的右鍵事件綁定右鍵菜單事件。
procedure TMainForm.UniDBGrid1CellContextClick(Column: TUniDBGridColumn; X,  Y: Integer);
begin
  n1.Caption:= '刪除  '+Column.Field.DataSet.FieldByName('aName').AsString;
   UniPopupMenu1.Popup(X, Y, UniDBGrid1);
end;

14.2]右鍵刪除多條記錄

    a]將這四項 勾選  dgRowSelect   dgCheckSelect dgMultiSelect dgDontShowSelected

    b]UniDBGrid1的OnCellContextClick事件

procedure TMainForm.UniDBGrid1CellContextClick(Column: TUniDBGridColumn;
  X, Y: Integer);
begin
  n1.Caption:= '刪除  '+ inttostr(UniDBGrid1.SelectedRows.Count) +'  項?';

  UniPopupMenu1.Popup(X, Y, UniDBGrid1); // 彈出 右鍵菜單,綁定UniDBGrid1
end;

     c] 執行 刪除 多行

var aStr:string;
begin
aStr:=   uniDBGrid6.DataSource.DataSet.FieldByname('Organize').AsString;
  // 如果該項已使用,不能刪除
  FDQuery3.Open('SELECT distinct 所屬部門 FROM MainTable where  所屬部門 = '''+
   aStr +    '''');
  if (FDQuery3.RecordCount > 0) then
  begin
    ShowMessage(aStr+'  已被使用中,不能刪除!');
    Exit;
  end;
  UniDBGrid1.SelectedRows.Delete; // 刪除多行
end;

  15]將UniDBGrid數據另存為網頁/CSV格式,方便導出

procedure UniDBGridToHTML(aFDquery :TFDQuery;aHTMLFileName:string);
var
  aHTMLtext: TstringList;
   j: integer;
begin
  aHTMLtext := TstringList.Create;
  aHTMLtext.Add
    ('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  ' +
    '<html>   <head>    <title></title>   </head>  ' +
    '  <body>  <table border=".5pt solid windowtext;"; > ' +
    ' <col width=72 span=3 style='' width:54pt''>');

  aHTMLtext.Add(' <tr > ');
    for j := 1 to aFDquery.FieldCount do
    begin
      aHTMLtext.Add('<td>');
      aHTMLtext.Add(aFDquery.Fields.FieldByNumber(j).FieldName);   //  列 名
      aHTMLtext.Add('</td>');
    end;
  aHTMLtext.Add(' </tr> ');

  aFDquery.First;
  while not(aFDquery.Eof) do
  begin
    aHTMLtext.Add(' <tr  > ');

    for j := 1 to aFDquery.FieldCount do
    begin
      aHTMLtext.Add('<td>');
      aHTMLtext.Add(aFDquery.Fields.FieldByNumber(j).AsString);   //  列  值
      aHTMLtext.Add('</td>');
    end;
    aHTMLtext.Add(' </tr> ');

    aFDquery.Next;
  end;

  aHTMLtext.Add('</table>  </body>  </html> ');
  aHTMLtext.SaveToFile(aHTMLFileName);
  aHTMLtext.Free;
end;

procedure DBGridToCSV(aFDquery: TFDQuery; aCSVFileName: string); // CSV格式
var
aCSVtext: TstringList;
i, j: integer;
tempStr: string;
begin
aCSVtext := TstringList.Create;

 
         

tempStr := ''; //第一行所有 的列名
for j := aFDquery.FieldCount downto 1 do
tempStr := aFDquery.Fields.FieldByNumber(j).FieldName + ',' + tempStr;
tempStr := Copy(tempStr, 0, Length(tempStr) - 1); // 去掉最后一個 ,
aCSVtext.Add(tempStr);

 
         

aFDquery.First; //所有 數據 導出
while not(aFDquery.Eof) do begin
tempStr := '';
for j := aFDquery.FieldCount downto 1 do begin

 
         

if ansiPos(',',aFDquery.Fields.FieldByNumber(j).AsString)>0 then
tempStr:='"'+ aFDquery.Fields.FieldByNumber(j).AsString +'"' + ',' + tempStr //如果單元格內點逗,整個單元外加雙引號
else tempStr := aFDquery.Fields.FieldByNumber(j).AsString + ',' + tempStr;
end;
tempStr := Copy(tempStr, 0, Length(tempStr) - 1); // 去掉最后一個 ,
aCSVtext.Add(tempStr);
aFDquery.Next;
end;

 
         


aCSVtext.SaveToFile(aCSVFileName);
aCSVtext.Free;
end;

procedure TMainForm.UniButton1Click(Sender: TObject);
begin
  UniDBGridToHTML(FDquery1,'aa.html');
UniSession.SendFile('aa.html'  //服務器端  文件名
                   ,'anew.html'          //客戶端 新下載 的文件名
                   );
/////////////////////////////////////////////////
UniDBGridToCSV(FDquery1,'ae.csv');
UniSession.SendFile('ae.csv' //服務器端 文件名
,'MySearch.csv' //客戶端 新下載 的文件名
);

end;

15.2用uniGUI自帶控件導出為Excel的xlsx格式,只適合1534版本以上

1】添加一個UniGridExcelExporter1控件到界面 上,可以設置它的一些屬性

 

2】綁定UniDBGrid1的Exporter屬性為1】中UniGridExcelExporter1,並在此設置Excel文件的一些屬性

 

3】導出事件,UniButton1的導出代碼:

UniDBGrid1.Exporter.ExportGrid;


 

 16]自畫行和單元格

procedure TMainForm.UniDBGrid1DrawColumnCell(Sender: TObject; ACol,
  ARow: Integer; Column: TUniDBGridColumn; Attribs: TUniCellAttribs);
begin
  if ACol=0 then    // 某列
  begin
    Attribs.Color:=$E0E0E0;
    Attribs.Font.Style:=[fsBold];
  end;
  if ARow=1 then   //某行
  begin
    Attribs.Color:=$ffffff;
    Attribs.Font.Style:=[fsItalic];
  end;

  if Column.FieldName='UnitPrice' then
  begin
    if Column.Field.AsFloat>100 then
    begin
      Attribs.Font.Color:=clMaroon;
      Attribs.Font.Style:=[fsBold, fsItalic];
    end;
  end
  else if Column.FieldName='Quantity' then
  begin
    if Column.Field.AsInteger<200 then
    begin
      Attribs.Font.Color:=clRed;
      Attribs.Font.Style:=[fsBold];
      Attribs.Color:=clLtGray;
    end;
  end;
end;

 


17]UniDBGrid增加按鈕列

a]將UniDBGrid1的Images屬性設為UniNativeImageList1,雙擊UniNativeImageList1,添加幾個image子目錄下的小圖片,用做按鈕圖片,如下側左圖所示。

b] 點中UniQuery1將其SQL屬性如上側右圖所示配置查詢語句

select * from custom;//獲取UniDBGrid1關聯表的各個字段

c]點擊UniDBGrid1控件,在開發環境左上側Structure區域選擇UniDBGrid1的Columns,右鍵添加所有數據列,分別設置前五列的FieldName屬性(關聯字段名稱)、Title->Caption屬性(列標題名稱)和Width屬性(列寬),如下圖所示:再新增一按鈕列

d]點中最后一列,將其FieldName設為“button”(名字隨意,輸入時會提示數據庫鏈接錯誤,多次忽略即可),將其Title->Caption設為“操作”,將其ActionColumn->Enabled屬性設置為True,將其ActionColumn->Buttons屬性打開,增加三個按鈕,分別點擊每個TUniGridActionButton-x按鈕,設置其ButtonId(按鈕編號)、Hint(提示信息)、ImageIndex(關聯到UniNativeImageList1的圖片編號)屬性,如下圖所示:

 

 e]點擊UniDBGrid1,在開發環境左下側Object Inspector區域選擇Events,添加OnColumnActionClick事件,簡單示意點擊不同按鈕調用不同事件:

procedure TMainForm.UniDBGrid1ColumnActionClick(Column: TUniDBGridColumn;
  ButtonId: Integer);
begin
 if ButtonId=0 then begin  // 左鍵點擊 刪除圖標 刪除一列
    UniDBGrid1.DataSource.DataSet.Delete;
 end;
end;

官方例子D:\Program Files\FMSoft\Framework\uniGUI\Demos\Desktop\Grid - ActionColumn


 18]Argument out of range.錯誤

Argument out of range.錯誤往往 是uniDBGrid有右鍵手動添加的固定列,刪除該固定列。


19]一行所有列的編輯,RowEditor

uniDBGrid1.RowEditor:=Ture;

設置后,雙擊(可以在ClicksToEdit屬性里設置)某一行,所有列的都可以編輯,最后點Confirm提交,點Cancel取消。


20]隔行背景色設置StripeRows

 uniDBGrid1.StripeRows:=True;


 21]不顯示Title按鈕

UniDBGrid1.Columns[0].Menu.MenuEnabled:=False;


 


22UniDBGrid當前列名/當前行總數/數據遍歷/動態創建Filtering.Editor

UniDBGrid1.Columns[UniDBGrid1.CurrCol].FieldName;//當前列名
UniDBGrid1.DataSource.DataSet.Refresh;//更新數據

unidbgrid1.DataSource.DataSet.RecordCount//當前行總數。

procedure TMainForm.UniFormCreate(Sender: TObject);//動態創建Filtering.Editor
Var
THidenPanel: TUniHiddenPanel;
TEdit: TUniEdit;
begin

THidenPanel:= TUniHiddenPanel.Create(self);
THidenPanel.Parent := Self; //<--------------------
THidenPanel.Name:= 'THiddenPanel';

TEdit:= TUniEdit.Create(self);
TEdit.Parent:= THidenPanel;
TEdit.Name:= 'TEdit';
TEdit.EmptyText:= 'teste';

if Assigned(TEdit) then
begin
UniDBGrid1.Columns[3].Filtering.Editor:= TEdit;
UniDBGrid1.Columns[3].Filtering.Enabled:= True;
end;

end;


23]設置標題行高

procedure TMainForm.UniFormCreate(Sender: TObject);
begin
  UniDBGrid1.Columns[0].Title.Caption := '<br/>' + UniDBGrid1.Columns[0].Title.Caption + '<br/><br/>';
//如果要更寬,多加幾個<br/>
  UniDBGrid1.Columns[0].Title.Caption := '<br/>' + UniDBGrid1.Columns[0].Title.Caption + '<br/><br/><br/>';
  UniTabSheet1.Caption:='<br/>' + 'asdfas' + '<br/><br/><br/>';//類似地uniPagecontol的表頭也可以這樣加寬
end;

之前

 之后 

.x-column-header{/*表頭設置*/
color:black;/*字體顏色*/
font-size:13px;/*字體大小*/
height: 50px;/*表頭高度*/
border: none;/*表頭框線*/
background:#C1C1C1;/*表頭背景*/
}
.GridLotacao .x-grid-column {/*帶元素id的屬性(設置欄),在unidbgrid中的layoutconfig屬性中的cls子屬性中加入GridLotacao名稱*/
    height: 50px;
}
 
.GridLotacao .x-grid-cell {/*帶元素id的屬性(設置單元格),在unidbgrid中的layoutconfig屬性中的cls子屬性中加入GridLotacao名稱*/
    height: 50px !important;
    line-height: 50px !important;
}

 


 24]設置某列的左右對齊(不含標題)

UniDBGrid1.Columns[0].Alignment := taLeftJustify; // 靠左 排列TAlignment = (taLeftJustify, taRightJustify, taCenter);

 25]設置某列為進度條顯示

注意:UniDBGrid1DrawColumnCell事件里不用調用類似

//  UniDBGrid1.Columns[3].Width := 90;
//  UniDBGrid1.Columns[0].Alignment := taLeftJustify; // 靠左 排列
UniDBGrid1.Columns[3]類似屬性,要寫在FormCreate

 a]假設FDQuery1的相關數據庫設置都已連好。

 b]右擊UniDBGrid1的Columns,新增與FDQuery1相對應的字段,進度條字段為整數類型pro

]

c]放一個UniProgressbarWidget1,並設置Min,Max屬性0,100

  

 d]關聯字段

 

 e]書寫數據庫代碼

procedure TMainForm.UniFormCreate(Sender: TObject);
begin
   UniDBGrid1.Columns[0].Width := 90;
  FDQuery1.Connection := UniMainModule.FDConnection1;

  UniMainModule.FDConnection1.LoginPrompt := False; // 取消登錄提示框
  UniMainModule.FDConnection1.Open('DriverID=SQLite;Database=test1.Sqlite3');

  FDQuery1.Open('select isDone   ,aName  ,id,pro from ToDoListTable');//這里寫UniDBGrid1中對應的列名

end;

還有兩個參數可顯示

 

 

要顯示百分率,ShowPercent和ShowValue 必同時設為True

 


 

26]unigui的dbgrid點擊列標題進行排序

procedure DBGridSortByCol(dbGrid: TUniDBGrid; Column: TUniDBGridColumn; Direction: Boolean);
  var OrderStr:string;
      OrderPos:integer;
      SqlStr:string;
      Para:TUniParams;
      DescStr:string;
      OldSqlStr:string;
begin
if Direction=True then
DescStr:=''
else
DescStr:=' desc';

OldSqlStr:=(dbGrid.DataSource.DataSet as TUniQuery).SQL.Text;

SqlStr:=LowerCase(OldSqlStr);


Para:=(dbGrid.DataSource.DataSet as TUniQuery).Params;

OrderPos:=Pos(' order ',SqlStr);

if OrderPos=-1 then
begin
  SqlStr:=SqlStr+' order by '+Column.FieldName;
end
else
begin
  SqlStr:=Copy(SqlStr,0,OrderPos)+' order by '+Column.FieldName;;
end;

(dbGrid.DataSource.DataSet as TUniQuery).Close;
(dbGrid.DataSource.DataSet as TUniQuery).SQL.Text:=SqlStr+DescStr;
(dbGrid.DataSource.DataSet as TUniQuery).Params:=Para;
(dbGrid.DataSource.DataSet as TUniQuery).Open;
end

27]遍歷選中行

var
i:integer;
aStr:string;
begin
    for i := 0 to (UniDBGrid1.SelectedRows.Count - 1) do begin
      UniDBGrid1.DataSource.DataSet.Bookmark  :=  UniDBGrid1.SelectedRows[i];
      aStr:=aStr+'_'+ UniDBGrid1.DataSource.DataSet.FieldByName('設備型號').AsString;
    end;
     MessageDlg(aStr, mtConfirmation, [mbOK],nil);
end;


 

 28_UniDBGrid 實現分頁,下拉選擇每頁數據行數,pageSize

https://blog.csdn.net/u012449478/article/details/99678435?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

 
        
29unidbgrid 如何替換某個字段的顯示值 比如字段值為0的時候 顯示成功  1顯示不成功
procedure flagGetText(Sender: TField; var Text: string; DisplayText: Boolean);
procedure dbg_cmdlogDrawColumnCell(Sender: TObject; ACol, ARow: Integer; Column: TUniDBGridColumn; Attribs: TUniCellAttribs);
 
        
procedure TUniFm_logCmd.flagGetText(Sender: TField; var Text: string;
  DisplayText: Boolean);
begin
  if Sender.Asinteger = 1 then
    Text := '成功 '
  else
    Text := '失敗 ';
end;

procedure TUniFm_logCmd.dbg_cmdlogDrawColumnCell(Sender: TObject; ACol,
  ARow: Integer; Column: TUniDBGridColumn; Attribs: TUniCellAttribs);
begin
  if Column.FieldName = 'Flag' then
  begin
    Column.Field.OnGetText := flagGetText;
  endend;

30激活列頭末尾的排序菜單,運用UniDBGrid列頭實現排序


31單擊一單元格,即獲得焦點,並處於編輯狀態

這一項設成1就是單擊,設成2就是雙擊

 

 

 同時,Options的dgRowSelect要設為False


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM