2011-08-09 3 views
0

RadGridに問題があります...私のaspxファイルで、ナビゲーションプロパティフィールドでグリッドの列値を設定する方法を教えてください。RadGridの列のナビゲーションプロパティの設定

私はエンティティを使用している、と私は私のグリッドがnullではその値が付属しています。この時点では別の表「ステージング」へのフィールド・プロセスの外部キー、

とテーブルSapDocumentsを持っています...

<MasterTableView GridLines="None" Width="100%" ViewStateMode="Disabled" CommandItemSettings-ShowExportToCsvButton="True" 
       CommandItemSettings-ShowAddNewRecordButton="false" CommandItemDisplay="Top"> 
       <Columns> 
        <telerik:GridBoundColumn DataField="SequencialNumber" HeaderText="SequencialNumber" 
         UniqueName="SequencialNumber" SortExpression="SequencialNumber"> 
        </telerik:GridBoundColumn> 
        <telerik:GridBoundColumn DataField="Priority" HeaderText="Priority" UniqueName="Priority" 
         FilterControlAltText="Filter Priority column" SortExpression="Priority" DataType="System.Int32"> 
        </telerik:GridBoundColumn> 
        <telerik:GridBoundColumn DataField="Process" HeaderText="Staging" UniqueName="Process" 
         SortExpression="Process" FilterControlAltText="Filter Process column"> 
        </telerik:GridBoundColumn> 
        <telerik:GridBoundColumn DataField="SupplierCode" HeaderText="SupplierCode" UniqueName="SupplierCode" 
         SortExpression="SupplierCode" FilterControlAltText="Filter SupplierCode column"> 
        </telerik:GridBoundColumn> 
        <telerik:GridBoundColumn DataField="MessageStatus" HeaderText="MessageStatus" UniqueName="MessageStatus" 
         SortExpression="MessageStatus" FilterControlAltText="Filter MessageStatus column"> 
        </telerik:GridBoundColumn> 
        <telerik:GridBoundColumn DataField="DocumentType" HeaderText="DocumentType" UniqueName="DocumentType" 
         FilterControlAltText="Filter DocumentType column" SortExpression="DocumentType"> 
        </telerik:GridBoundColumn> 
        <telerik:GridDateTimeColumn UniqueName="InvoiceCreationDate" DataField="InvoiceCreationDate" 
         HeaderText="InvoiceCreationDate" FilterControlAltText="Filter InvoiceCreationDate column" 
         SortExpression="InvoiceCreationDate"> 
         <FilterTemplate> 
          <telerik:RadDatePicker ID="RadDatePicker1" runat="server"> 
          </telerik:RadDatePicker> 
         </FilterTemplate> 
        </telerik:GridDateTimeColumn> 
        <telerik:GridBoundColumn DataField="SupplierVatNumber" FilterControlAltText="Filter SupplierVatNumber column" 
         HeaderText="SupplierVatNumber" SortExpression="SupplierVatNumber" UniqueName="SupplierVatNumber"> 
        </telerik:GridBoundColumn> 
       </Columns> 
       <ExpandCollapseColumn Visible="False"> 
        <HeaderStyle Width="19px"></HeaderStyle> 
       </ExpandCollapseColumn> 
       <RowIndicatorColumn Visible="False"> 
        <HeaderStyle Width="20px" /> 
       </RowIndicatorColumn> 
      </MasterTableView> 
      <FilterMenu EnableImageSprites="False"> 
      </FilterMenu> 
      <HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Default"> 
      </HeaderContextMenu> 
     </telerik:RadGrid 

>

私はそのようにそれにアクセスすることができます....私のナビゲーションプロパティの値を持つものを2つの列の値を設定する必要があります。

  • SapDocuments.Staging.Process;
  • SapDocuments.Priorities.Priority;

    public List<SapDocuments> GetSapDocumentsByUser(string userName) 
    { 
        using (EscalonamentoFacturasEntities spDocs = new EscalonamentoFacturasEntities()) 
        { 
    
         //Não é permitido projecções select new... 
         var documentsQuery = from sd in spDocs.SapDocuments 
              join ua in spDocs.UsersAssign 
              on new { sd.Staging.Process, sd.Priorities.Priority } 
              equals 
              new { ua.Process, ua.Priority } 
              where ua.UserName == userName 
    
              //ALterar User 
    
              select sd; 
    
    
         return documentsQuery.ToList(); 
    

の背後に私のコードはこれです:

private void LoadData() 
    { 
     //Popular dados na Radlist 

     SapDocumentsBO sapDocs = new SapDocumentsBO(); 
     this.SapDocuments = sapDocs.GetSapDocumentsByUser(Page.User.Identity.Name.Substring(Page.User.Identity.Name.IndexOf("\\")+1)); 

     RadGrid1.DataSource = this.SapDocuments; 


    } 

    protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e) 
    { 
     LoadData(); 
    } 

答えて

0

あなたはオブジェクトコンテキストに遅延ロードを有効にしましたか?そうでない場合、リレーションシップは常にnullになり、関連付けられた参照でLoad()メソッドを使用して手動でインスタンス化する必要があります。 http://msdn.microsoft.com/en-us/library/dd456846.aspx

EDIT:ここでその上よりも、あなたは

var documentsQuery = from sd in spDocs.SapDocuments 
          join ua in spDocs.UsersAssign 
          on new { sd.Staging.Process, sd.Priorities.Priority } 
          equals 
          new { ua.Process, ua.Priority } 
          where ua.UserName == userName 
          select new 
          { 
           spDocs.SequentialNumber, 
           Process = (spDocs.Staging != null) ? spDocs.Staging.Process : "", 
           Priority = (spDocs.Priorities != null) ? spDocs.Priorites.Priority : "" 
          }; 

を考慮したIQueryableまたはIListのように、結果を返すことができます。それは本当にバインドするのが簡単になります。

また、RadGridは、私は次のように信じて、ドット表記をサポートしてい:私はすでに真の遅延ロードを入れていた

<telerik:GridBoundColumn DataField="Priorities.Priority" HeaderText="Priority" ... 
+0

おかげで...私のDataGridのデータが付属しています...しかし、問題があるときにIテーブルSapDocuments、優先度(フィールド優先度)とステージング(フィールドプロセス)の間の関係を作成すると、これらのフィールドはSapDocumentsのナビゲーションプロパティになり、グリッドが読み込まれると、すべての列は優先度とプロセス以外の値を持ちます。手動でインスタンス化するのは正しいでしょうか? – Enjoy

+0

あなたが読書を話していて、LazyLoadEnabledが真の場合、いいえ、手動でインスタンス化する必要はありません。何が起こっているのかを知るのは難しいですが、私はあなたに上記のバインドのための別のオプションを与えるつもりです。 –

+0

しかし、現時点では、プロセスと優先度の列にデータを持たせるために私のコードに何かがありませんでしたが、私は何を知っていますか... – Enjoy

関連する問題