Использование Codefluent entitycollection с Infragistics WebHierarchicalDataGrid

#asp.net #list #infragistics #icollection #codefluent

#asp.net #Список #инфраструктура #icollection #codefluent

Вопрос:

Я ищу некоторую помощь по связыванию Codefluent entitycollection с Infragistics WebHierarchicalDataGrid (версия 14.2). Для иллюстрации у меня есть две сущности Codefluent: Customer и Order; где у одного связанного клиента много связанных заказов.

На моей странице ASP я создал WebHierarchicalDataGrid, WebHierarchicalDataSource и два ObjectDataSources. Для WebHierarchicalDataSource я создал два представления данных вместе с их ссылками на данные. Все поля DataMember, Key и DataKey для WebHierarchicalDataGrid установлены правильно.

Если для методов выбора ObjectDataSources установлены методы загрузки для CustomerCollection и OrderCollection, WebHierarchicalDataGrid отображается как ожидалось, то есть строки клиентов имеют вложенные строки заказов в сетке, и при нажатии на значок expansion отображаются строки заказов клиентов.

То, что я пытаюсь сделать, это отобразить WebHierarchicalDataGrid для одного клиента на основе ввода пользователя в текстовое поле на веб-странице.

В исходном коде я установил метод выбора ObjectDataSource клиента для метода (LoadByCustomerID), определенного в модели Codefluent, который содержит один параметр (CustomerID), который я установил в значение из текстового поля. Затем я вызываю метод выбора ObjectDataSources клиента. Это возвращает желаемый объект Customer, как и ожидалось.

Из возвращенного объекта Customer я использую данные из поля (GUID) в объекте Customer для предоставления метода выбора (LoadOrdersByCustomerGUID) ObjectDataSources заказа. Это также возвращает ожидаемый сбор заказов одного или нескольких связанных заказов клиентов.

Результаты, отображаемые в WebHierarchicalDataGrid, относятся только к родительской строке (выбранному клиенту). В строке клиента отображается значок расширения, но при нажатии на значок расширения не отображаются извлеченные записи заказов для выбранного клиента.

Как мне заставить WebHierarchicalDataGrid отображать связанные заказы клиента при нажатии на значок расширения?

        <ig:WebHierarchicalDataGrid ID="hdg_Customer" runat="server" 
       Height="600px" Width="95%" 
       AutoGenerateBands="False" AutoGenerateColumns="False" 
       DataMember="ods_Customer_DefaultView" 
       DataSourceID="hds_Customer" 
       Key="ods_Customer_DefaultView" 
       DataKeyFields="GUID" 
       Enabled="False" >
        <Bands>
            <ig:Band 
                AutoGenerateColumns="False" 
                DataMember="ods_Orders_DefaultView" 
                Key="ods_Orders_DefaultView"
                DataKeyFields="GUID" >
                <Columns>
                    <ig:BoundDataField DataFieldName="GUID" Key="GUID">
                        <Header Text="Order GUID">
                        </Header>
                    </ig:BoundDataField>
                    <ig:BoundDataField DataFieldName="OrderDate" Key="OrderDate">
                        <Header Text="Order Date">
                        </Header>
                    </ig:BoundDataField>
                    <ig:BoundDataField DataFieldName="TotalOrderAmount" Key="TotalOrderAmount">
                        <Header Text="Total Order Amount">
                        </Header>
                    </ig:BoundDataField>                 
                    <ig:BoundDataField DataFieldName="relatedCustomerGUID" Key="relatedCustomerGUID">
                        <Header Text="related Customer GUID">
                        </Header>
                    </ig:BoundDataField>
                </Columns>
            </ig:Band>
        </Bands>
        <Columns>
            <ig:BoundDataField DataFieldName="GUID" Key="GUID">
                <Header Text="Customer GUID">
                </Header>
            </ig:BoundDataField>--%>
            <ig:BoundDataField DataFieldName="CustomerID" Key="CustomerID">
                <Header Text="Customer ID">
                </Header>
            </ig:BoundDataField>
            <ig:BoundDataField DataFieldName="CustomerName" Key="CustomerName">
                <Header Text="Customer Name">
                </Header>
            </ig:BoundDataField>
            <ig:BoundDataField DataFieldName="CustomerState" Key="CustomerState">
                <Header Text="Customer State">
                </Header>
            </ig:BoundDataField>

        </Columns>
    </ig:WebHierarchicalDataGrid>

    <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server"></asp:ScriptManagerProxy>

    <ig:WebHierarchicalDataSource ID="hds_Customer" runat="server">
        <DataViews>
            <ig:DataView ID="ods_Customer_DefaultView" 
                DataMember="DefaultView" 
                DataSourceID="ods_Customer" />
            <ig:DataView ID="ods_Orders_DefaultView" 
                DataMember="DefaultView" 
                DataSourceID="ods_Orders" />
        </DataViews>
        <DataRelations>
            <ig:DataRelation 
                ChildColumns="relatedCustomerGUID" 
                ChildDataViewID="ods_Orders_DefaultView" 
                ParentColumns="GUID" 
                ParentDataViewID="ods_Customer_DefaultView" />
        </DataRelations>
    </ig:WebHierarchicalDataSource>

    <asp:ObjectDataSource ID="ods_Orders" runat="server" 
        DataObjectTypeName="Accounts.Order" 
        OldValuesParameterFormatString="original_{0}" 
        SelectMethod="LoadAll" 
        TypeName="Accounts.OrderCollection"   >
    </asp:ObjectDataSource>

    <asp:ObjectDataSource ID="ods_Customer" runat="server" 
        DataObjectTypeName="Accounts.Customer" 
        OldValuesParameterFormatString="original_{0}" 
        SelectMethod="LoadAll" 
        TypeName="Accounts.CustomerCollection" >
    </asp:ObjectDataSource>
</asp:Content>
  

выберите клиента и связанные заказы
(попробовал заменить это):

 <asp:ObjectDataSource ID="ods_Orders" runat="server" 
    DataObjectTypeName="Accounts.Order" 
    OldValuesParameterFormatString="original_{0}" 
    SelectMethod="LoadByCustomerGUID" 
    TypeName="Accounts.OrderCollection"   >
    <SelectParameters>
        <asp:Parameter DefaultValue="" Name="CustomerGUID" Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>

<asp:ObjectDataSource ID="ods_Customer" runat="server" 
    DataObjectTypeName="Accounts.Customer" 
    OldValuesParameterFormatString="original_{0}" 
    SelectMethod="LoadBySequence" 
    TypeName="Accounts.CustomerCollection" >
    <SelectParameters>
        <asp:Parameter DefaultValue="0" Name="Sequence" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>
  

Код позади:

 protected void SelectID_Click(object sender, EventArgs e)
{
    Accounts.Customer _customer = default(Accounts.Customer);
    Accounts.CustomerCollection _customers = default(Accounts.CustomerCollection);
    Accounts.OrderCollection _orders = default(Accounts.OrderCollection);
    ods_Customer.SelectParameters("CustomerID").DefaultValue = textbox_CustomerID.Text;
    _customers = ods_Customer.Select();
    _customer = _customers(0);
    ods_Orders.SelectMethod = "LoadByCustomerGUID";
    ods_Orders.SelectParameters("CustomerGUID").DefaultValue = _customer.GUID.ToString;
    _orders = ods_Orders.Select();
}
  

Комментарии:

1. Можете ли вы добавить ASP.NET код?

2. Codefluent реализует следующие интерфейсы: IList, ICollection, IBindingList (System. Коллекции. Я список, система. Коллекции. ICollection, система. Коллекции. Общий. Я список, система. Коллекции. Общий. ICollection, система. ComponentModel. IRaiseItemChangedEvents, System. ComponentModel. INotifyPropertyChanged, System. Коллекции. Специализированный. INotifyCollectionChanged, System. ComponentModel. IBindingList, System. ComponentModel. ICancelAddNew)