1

電話番号を販売する会社のショッピング カートを作成中です。電話番号を購入するには、「顧客」はさまざまな手順を経て電話番号を設定する必要があります。

  • ステップ 1: 電話番号を選ぶ
  • ステップ 2: この番号に通話パッケージを追加する
  • ステップ 3: ボイスメールなどの追加機能を追加します。
  • ステップ 4: 注文とチェックアウトの確認

これまでの私のアプローチは、NumberCart というデータベース内のテーブルに顧客の選択を格納するウィザード スタイルのプロセスでした。これにより、ステップ 1 と 2 のすべての情報が保存されます。

ステップ 3 は、顧客が選択した番号に関連付けられた多数のオプションを持つことができるため、少しトリッキーです。これに取り組むために、FeatureCart という別のテーブルに機能の選択肢を保存することにしました。

私はEntity Frameworkを利用してデータを取得および挿入しています。データ モデルは、このリンクをカット アンド ペーストすることで表示できます (私は初心者なので、Stackoverflow では 2 つのリンクしか投稿できません)。

[armourcreative.co.uk/EntityDesignerDiagram.bmp]

私の質問は、両方のテーブルを取得し、結果を Web ページにレンダリングして、下のリンクの画像のように表示する方法はありますか?

まさに私が達成したいことのカートレンダリングの例

私が取得できるように見えるのは、同じページの NumberFeatureView と NumberPackageView に接続された 2 つの EntityDataSources だけで、以下のリンクの画像のようにレンダリングされます。

探しているものではないカートのレンダリングの例

ご覧のように、ユーザーの選択を表示する方法があまり明確ではありません。これは、機能が属する電話番号に関連付けられていないためです。

私の考えは、 NumberPackageView のものと一致する CartID と NumberID に基づいて NumberFeatureView を表示することです。

誰かが上記を達成する方法を教えてくれたら、とても感謝しています。私は助けと指導を切望している理由です。

リビジョン

さて、以下のコードを使用して、カートを正しくレンダリングすることができました。

    <h3>Please review your order!</h3>
<asp:ListView ID="NumberPackageView_LV" runat="server" 
    DataSourceID="NumberPackageView_EDM">

    <EmptyDataTemplate>
        No data was returned.
    </EmptyDataTemplate>


    <ItemTemplate>
        <li style="">
            <asp:HiddenField ID="ID" runat="server" Value='<%# Eval("NumberID") %>' />
            <strong><asp:Label ID="NumberLabel" runat="server" Text='<%# Eval("Number") %>' /></strong>&nbsp;&nbsp;&rarr;&nbsp;&nbsp;
            <asp:Label ID="DestinationLabel" runat="server" Text='<%# Eval("Destination") %>' />
            <br />
            <asp:Label ID="PkgNameLabel" runat="server" Text='<%# Eval("PkgName") %>' />&nbsp;&nbsp;&nbsp;&nbsp;
            <asp:Label ID="PkgMonthlyLabel" runat="server" Text='<%# string.Format("{0:c}",(Eval("PkgMonthly"))) %>' />


            <!-- ENTITY DATA SOURCE FOR FEATURES -->

<asp:ListView ID="NumberFeatureView_LV" runat="server" 
    DataSourceID="NumberFeatureView_EDM">
    <EmptyDataTemplate>
        No data was returned.
    </EmptyDataTemplate>
    <ItemTemplate>
        <li style="">
            <asp:Label ID="FeatureNameLabel" runat="server" Text='<%# Eval("FeatureName") %>' />
            <asp:Label ID="FeatureSetUpLabel" runat="server" Text='<%# string.Format("{0:c}", (Eval("FeatureSetUp"))) %>' />
            <asp:Label ID="FeatureMonthlyLabel" runat="server" Text='<%# string.Format("{0:c}", (Eval("FeatureMonthly"))) %>' />
        </li>
    </ItemTemplate>
    <LayoutTemplate>
        <ul ID="itemPlaceholderContainer" runat="server" style="">
            <li runat="server" id="itemPlaceholder" />
        </ul>
    </LayoutTemplate>
</asp:ListView>



<asp:EntityDataSource ID="NumberFeatureView_EDM" runat="server" 
    AutoGenerateWhereClause="True" ConnectionString="name=ShoppingCartv2Entities" 
    DefaultContainerName="ShoppingCartv2Entities" EnableFlattening="False" 
    EntitySetName="NumberFeatureViews" 
    Select="it.[FeatureName], it.[FeatureSetUp], it.[FeatureMonthly]" Where="">
    <WhereParameters>
        <asp:SessionParameter DefaultValue="0" Name="CartID" SessionField="ShoppingCartv2_CartId" />
    </WhereParameters>
</asp:EntityDataSource>

<!-- ENTITY DATA SOURCE FOR FEATURES [END] -->

 </li>
    </ItemTemplate>
    <LayoutTemplate>
        <ul ID="itemPlaceholderContainer" runat="server" style="">
            <li runat="server" id="itemPlaceholder" />
        </ul>
    </LayoutTemplate>
</asp:ListView>

<asp:EntityDataSource ID="NumberPackageView_EDM" runat="server" 
    AutoGenerateWhereClause="True" ConnectionString="name=ShoppingCartv2Entities" 
    DefaultContainerName="ShoppingCartv2Entities" EnableFlattening="False" 
    EntitySetName="NumberPackageViews" 
    Select="it.[NumberID], it.[Number], it.[Destination], it.[PkgName], it.[PkgMonthly]" Where="">
    <WhereParameters>
        <asp:SessionParameter DefaultValue="0" Name="CartID" SessionField="ShoppingCartv2_CartId" />
    </WhereParameters>
</asp:EntityDataSource>

私の唯一の問題は、結果がセッションカートでフィルタリングされているため、特定の番号に対して選択された機能を表示するのではなく、FeatureCart に格納されているすべての機能を各番号で繰り返していることです。(これは、お客様がショッピング カートに複数の電話番号を追加した場合にのみ発生します)

例:

0800 123 0001

  • 機能ボイスメール
  • 機能通話録音
  • 機能リング グループ

0800 123 0002

  • 機能ボイスメール
  • 機能通話録音
  • 機能リング グループ

それ以外の

0800 123 0001

  • 機能リング グループ

0800 123 0002

  • 機能ボイスメール
  • 機能通話録音

各番号の同じ選択ではなく、関連する番号に対して選択された機能のみを表示する方法を誰か教えてもらえますか? (それが理にかなっている場合)

4

1 に答える 1

0

試してみたいオプションは、リストを作成し、両方のテーブルの行をそのリストに格納してから、リストをグリッドにバインドすることです。例えば:

public class Main
{

    public void BindData()
    {
        List<MyList> myResults = new List<MyList>();

        //Add rows from numbercart to list object
        foreach (var item in NumberCart)
        {
            myResults.Add(new MyList { Item = item.item, Price = item.price });
        }

        //Add rows from feature cart to list object
        foreach (var item in FeatureCart)
        {
            myResults.Add(new MyList { Item = item.item, Price = item.price });
        }

        //Bind to datagrid
        myDataGrid.DataSource = myResults;

    }
}



public class MyList
{
    public string Item {get; set;}
    public float Price {get; set;}
}
于 2012-08-18T17:21:06.510 に答える