Asp.net RadGrid集列导航属性

Asp.net RadGrid集列导航属性,asp.net,radgrid,navigation-properties,Asp.net,Radgrid,Navigation Properties,我的RadGrid有问题…您能告诉我如何在我的aspx文件中使用导航属性字段设置我的网格的列值吗 我使用的是实体,我有一个表SapDocuments,它带有字段进程的外键,用于另一个表Staging 此时,我的网格值为null <MasterTableView GridLines="None" Width="100%" ViewStateMode="Disabled" CommandItemSettings-ShowExportToCsvButton="True"

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

我使用的是实体,我有一个表SapDocuments,它带有字段进程的外键,用于另一个表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

是否在对象上下文上启用了延迟加载?否则,关系将始终为null,您必须使用关联引用上的Load方法手动实例化它们。更多信息请参见:

编辑:另外,你可以考虑

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

感谢我已经实现了延迟加载…我的DataGrid附带了数据…但问题是,当我创建表SapDocuments、PrioritiesField Priority和StagingField Process之间的关系时,这些字段成为SapDocuments上的导航属性…当网格加载时,每个列都有值,但优先级和进程除外……我必须手动实例化它们,对吗?如果你说的是阅读,并且LazyLoadEnabled为true,那么不,你不必手动实例化它们。很难说到底发生了什么,但我将为您提供另一个绑定上述内容的选项。但目前,我的代码中缺少了将数据带到进程和优先级列上的内容,但我不知道是什么…此时我的实体SapDocuments没有字段优先级或进程…我只使用导航属性Priorities和Staging访问它们…以及我的列,我必须对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 : ""
                             };
<telerik:GridBoundColumn DataField="Priorities.Priority" HeaderText="Priority" ...