程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 實現在virtualStringtree中編輯的標准步驟

實現在virtualStringtree中編輯的標准步驟

編輯:Delphi

  1.設置TVirtualStringTree屬性:

        toFullRowSelect : false;

        toMultiSelect:false;

         toExtendedFocous:true;

         toEditable:true;

         editDelay:0 //如果不調用editnode,則不會CREATE EDITOR

  2.實現virtualStringtree的ONClick事件:
    功能:根據當前獲取焦點的node,判斷是否edit該node

  TMMSLibraryForm版本:

  procedure TMMSLibraryForm.DataTreeClick(Sender: TObject);
  var
    Column:TColumnIndex;
    node:PVirtualNode;
  begin
    if DataTree.FocusedNode=nil then  Exit;

    node:=DataTree.FocusedNode;
    Column:=DataTree.FocusedColumn;

    if Column<>3 then
       DataTree.EditNode(node,Column);

  end;

  TSPNumbersForm版本:

  procedure TSPNumbersForm.VSTreeSPnumberClick(Sender: TObject);
  var
    Column:TColumnIndex;
    node:PVirtualNode;
  begin
    if VSTreeSPnumber.FocusedNode=nil then  Exit;

    node:=VSTreeSPnumber.FocusedNode;
    Column:=VSTreeSPnumber.FocusedColumn;

    VSTreeSPnumber.EditNode(node,Column);
  end;

  
  TTestNumberForm版本:

  procedure TTestNumberForm.VSTreeTestNumberClick(Sender: TObject);
  var
    Column:TColumnIndex;
    node:PVirtualNode;
  begin
    if VSTreeTestNumber.FocusedNode=nil then  Exit;

    node:=VSTreeTestNumber.FocusedNode;
    Column:=VSTreeTestNumber.FocusedColumn;

    VSTreeTestNumber.EditNode(node,Column);   
  end;

  3.實現virtualStringtree的ONCreateEditor事件:
    功能:如果editnode被調用,則執行此函數;之前設置editDelay:0,是為避免在不允許改動的node上出現editor

  TMMSLibraryForm版本:

  procedure TMMSLibraryForm.DataTreeCreateEditor(Sender: TBaseVirtualTree;
    Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
  begin
     EditLink:=TStringEditLink.create('',stringlist[node.index * 5+Column])
  end;

  
  TSPNumbersForm版本:

  procedure TSPNumbersForm.VSTreeSPnumberCreateEditor(
    Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
    out EditLink: IVTEditLink);
  begin
     EditLink:=TStringEditLink.create('',stringlist[node.index * 7+Column]);
  end;

  TTestNumberForm版本:

  procedure TTestNumberForm.VSTreeTestNumberCreateEditor(
    Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
    out EditLink: IVTEditLink);
  begin
     EditLink:=TStringEditLink.create('',stringlist[node.index * 4+Column]);
  end;

  4.實現virtualStringtree的ONNewText事件:
    功能:根據獲取焦點的node的column,判斷值的合法性,並同時更新數據庫和stringlist

  TMMSLibraryForm版本:

  procedure TMMSLibraryForm.DataTreeNewText(Sender: TBaseVirtualTree;
    Node: PVirtualNode; Column: TColumnIndex; NewText: WideString);
  var
    sql:string;
  begin
    case Column of
      0:
      begin
        if  (StrToInt64Def(Trim(NewText),-1)=-1) then
        begin
          ShowMessage('"'+Trim(NewText)+'"'+'does not represent a valid number!');
          Exit;
        end;

        sql:='update mmslibrary set MMS_ID='+Trim(NewText)+' where MMS_ID='+Stringlist.strings[node.Index*5];

      end;

      1:
        sql:='update mmslibrary set MMS_Type="'+Trim(NewText)+'" where MMS_ID='+Stringlist.strings[node.Index*5];

      2:
        sql:='update mmslibrary set MMS_Smil="'+Trim(NewText)+'" where MMS_ID='+Stringlist.strings[node.Index*5];

      4:
        sql:='update mmslibrary set MMS_Subject="'+Trim(NewText)+'" where MMS_ID='+Stringlist.strings[node.Index*5];

    end;

    if currentdatabase.ExecuteSqlNoQurey(sql)= 1 then
       ShowMessage('Save to Database sucessfully!')
    else
       ShowMessage('Error occurs while Saving to Database!');

    Stringlist.strings[node.Index*5+Column]:=Trim(NewText);

    DataTree.RootNodeCount:=stringlist.Count div 5 ;
    DataTree.Refresh;
  end;

  TSPNumbersForm版本:

  procedure TSPNumbersForm.VSTreeSPnumberNewText(Sender: TBaseVirtualTree;
    Node: PVirtualNode; Column: TColumnIndex; NewText: WideString);
  var
    sql:string;
  begin
    case Column of
      0:
      begin
        if  (StrToInt64Def(Trim(NewText),-1)=-1) then
        begin
          ShowMessage('"'+Trim(NewText)+'"'+'does not represent a valid number!');
          Exit;
        end;

        sql:='update spnumbers set SP_SPID='+Trim(NewText)+' where SP_SPID='+Stringlist.strings[node.Index*7];
      end;
      1:
      sql:='update spnumbers set SP_Name="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7];
      2:
      sql:='update spnumbers set SP_Nameforshort="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7];
      3:
      sql:='update spnumbers set SP_Operationtype="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7];
      4:
      sql:='update spnumbers set SP_Code="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7];
      5:
      sql:='update spnumbers set SP_Operationcode="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7];
      6:
      sql:='update spnumbers set SP_OperationName="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7];
    end;

    if currentdatabase.ExecuteSqlNoQurey(sql)= 1 then
       ShowMessage('Save to Database sucessfully!')
    else
       ShowMessage('Error occurs while Saving to Database!');

    Stringlist.strings[node.Index*7+Column]:=Trim(NewText);

    VSTreeSPnumber.RootNodeCount:=stringlist.Count div 7 ;
    VSTreeSPnumber.Refresh;
  end;

  TTestNumberForm版本:

  procedure TTestNumberForm.VSTreeTestNumberNewText(Sender: TBaseVirtualTree;
    Node: PVirtualNode; Column: TColumnIndex; NewText: WideString);
  var
    sql:string;
  begin
    case Column of
      0:
      begin
        if  (StrToInt64Def(Trim(NewText),-1)=-1) then
        begin
          ShowMessage('"'+Trim(NewText)+'"'+'does not represent a valid number!');
          Exit;
        end;

        sql:='update testnumbers set TN_MSISDN='+Trim(NewText)+' where TN_MSISDN='+Stringlist.strings[node.Index*4];
      end;
      1:
      sql:='update testnumbers set TN_Imsi="'+Trim(NewText)+'" where TN_MSISDN='+Stringlist.strings[node.Index*4];
      2:
      sql:='update testnumbers set TN_Location="'+Trim(NewText)+'" where TN_MSISDN='+Stringlist.strings[node.Index*4];
      3:
      sql:='update testnumbers set TN_Description="'+Trim(NewText)+'" where TN_MSISDN='+Stringlist.strings[node.Index*4];
    end;

    if currentdatabase.ExecuteSqlNoQurey(sql)= 1 then
       ShowMessage('Save to Database sucessfully!')
    else
       ShowMessage('Error occurs while Saving to Database!');

    Stringlist.strings[node.Index*4+Column]:=Trim(NewText);

    VSTreeTestNumber.RootNodeCount:=stringlist.Count div 4 ;
    VSTreeTestNumber.Refresh;
  end;
  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved