【问题标题】:RadGrid Set Column Navigation PropertyRadGrid 设置列导航属性
【发布时间】:2011-08-09 12:36:51
【问题描述】:

我的 RadGrid 出现问题...您能告诉我如何在我的 aspx 文件中使用导航属性字段设置网格的列值吗?

我正在使用实体,并且我有一个表 SapDocuments,其中包含字段 Process 的外键到另一个表“Staging”,

此时我的网格的值为 null...

<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

>

我需要用我的导航属性的值设置这两个列值....我可以这样访问它:

  • 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();
    }

【问题讨论】:

    标签: asp.net radgrid navigation-properties


    【解决方案1】:

    您是否在对象上下文上启用了延迟加载?如果不是,则关系将始终为空,并且您必须使用关联引用上的 Load() 方法手动实例化它们。更多信息在这里:http://msdn.microsoft.com/en-us/library/dd456846.aspx

    编辑:另外,你可以考虑

    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" ...
    

    【讨论】:

    • 谢谢我已经把延迟加载设置为 true...我的 DataGrid 带有数据...但问题是当我创建表 SapDocuments、Priorities(Field Priority) 和 Staging(Field Process),这些字段成为 SapDocuments 上的导航属性...当 Grid 加载时,每一列都有除 Priority 和 Process 之外的值...我必须手动实例化它们吗?
    • 如果您正在阅读,并且 LazyLoadEnabled 为 true,那么不,您不必手动实例化它们。很难说发生了什么,但我将在上面为您提供另一种绑定选项。
    • 但此时我的代码中缺少一些东西来将数据带到列 Process 和 Priority 上,但我不知道是什么......
    • 此时我的实体 SapDocuments 没有字段 Priority 或 Process...我只使用导航属性(Priorities 和 Staging)访问它们..我有列
    • 我必须对 aspx 语句进行一些更改,以告诉我的网格优先级和进程的数据在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多