2016-10-18 6 views

答えて

3

私はファイルとフォルダのセレクタを同じコントロールに組み合わせましたが、いずれかの操作方法を理解するのは簡単です。 私はSOOrderEntryの拡張機能を使って私の例を作ったが、新しいスクリーンや別の既存のスクリーンと同じ原則である。 PXDataSource要素で

、次のようにDatatreesとPXTreeDataMember要素を追加します:FormViewコントロール要素で

<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%" TypeName="PX.Objects.SO.SOOrderEntry" PrimaryView="Document"> 
     <DataTrees> 
      <px:PXTreeDataMember TreeView="FilesTree" TreeKeys="FileKey" /> 
     </DataTrees> 
</px:PXDataSource> 

を、PXTreeSelectorを追加します。ここでは

<px:PXFormView ID="PXFormView2" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" DataMember="Document" Caption="Order Summary" 
    NoteIndicator="True" FilesIndicator="True" LinkIndicator="True" EmailingGraph="PX.Objects.CR.CREmailActivityMaint,PX.Objects" 
    ActivityIndicator="True" ActivityField="NoteActivity" DefaultControlID="edOrderType" NotifyIndicator="True" 
    TabIndex="14900"> 
    <Template> 
     <px:PXTreeSelector runat="server" TreeDataSourceID="ds" TreeDataMember="FilesTree" InitialExpandLevel="0" MinDropWidth="413" PopulateOnDemand="True" ShowRootNode="False" AllowEditValue="True" SelectOnFocus="False" DataField="ParentFolder" ID="edPathSelector"> 
      <DataBindings> 
       <px:PXTreeItemBinding DataMember="FilesTree" TextField="FileName" ValueField="FilePath" DescriptionField="FilePath" ImageUrlField="Icon" /> 
      </DataBindings> 
     </px:PXTreeSelector> 
    </Template> 
</px:PXFormView> 

は私のDACとグラフの拡張機能です。ご覧のように、グラフは.NET関数を列挙可能なファイルやフォルダに呼び出すだけです。いずれかのフォルダまたはファイルのコントロールを特殊化するには、正しい要素を返すだけです。ここで

using PX.Data; 
using PX.Web.UI; 
using System; 
using System.Collections; 
using System.IO; 
using System.Linq; 

namespace PX.Objects.SO 
{ 
    [Serializable] 
    public class RowFilesTree : IBqlTable 
    { 
     [PXString(IsKey = true, IsUnicode = true)] 
     [PXUIField(DisplayName = "FileKey")] 
     public string FileKey { get; set; } 
     public class fileKey : IBqlField { } 


     [PXString] 
     [PXUIField(DisplayName = "Path")] 
     public string FilePath { get; set; } 
     public class filePath : IBqlField { } 


     [PXString] 
     [PXUIField(DisplayName = "Name")] 
     public string FileName { get; set; } 
     public class fileName : IBqlField { } 

     [PXString(250)] 
     public virtual string Icon { get; set; } 
     public abstract class icon : IBqlField {} 
    } 


    public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry> 
    { 
     public PXSelect<RowFilesTree> FilesTree; 
     protected virtual IEnumerable filesTree([PXString]string FilePath) 
     { 
      if (string.IsNullOrEmpty(FilePath)) 
      { 
       var folders = Directory.GetLogicalDrives(); 
       foreach (var folder in folders) 
       { 
        yield return new RowFilesTree() 
        { 
         FileKey = folder.Replace(':', '>'), 
         FileName = folder, 
         FilePath = folder, 
         Icon = Sprite.Tree.GetFullUrl(Sprite.Tree.Folder) 
        }; 
       } 
      } 
      else 
      { 
       var folders = new string[0]; 
       var files = new string[0]; 

       try 
       { 
        var decode = FilePath.Replace('>', ':'); 
        folders = Directory.GetDirectories(decode); 
        files = Directory.GetFiles(decode); 

       } 
       catch 
       { 
       } 

       foreach (var folder in folders) 
       { 
        yield return new RowFilesTree() 
        { 
         FileKey = folder.Replace(':', '>'), 
         FileName = Path.GetFileName(folder), 
         FilePath = folder, 
         Icon = Sprite.Tree.GetFullUrl(Sprite.Tree.Folder) 
        }; 
       } 


       foreach (var file in files) 
       { 
        yield return new RowFilesTree() 
        { 
         FileKey = file.Replace(':', '>'), 
         FileName = Path.GetFileName(file), 
         FilePath = file, 
         Icon = Sprite.Tree.GetFullUrl(Sprite.Tree.Leaf) 
        }; 
       } 
      } 
     } 
    } 
} 

最終的な結果である:

Final result

関連する問題