1

我正在为一家销售电话号码的公司创建购物车。要购买电话号码,“客户”需要通过各种步骤来配置他们的电话号码。

  • 第一步:选择电话号码
  • 第二步:给这个号码添加通话套餐
  • 第三步:添加附加功能,例如语音邮件等...
  • 第四步:查看订单和结帐

到目前为止,我的方法是一个向导式的过程,我将客户选择存储在一个名为 NumberCart 的数据库中的表中。这存储了步骤一和二的所有信息。

第三步有点棘手,因为客户可以有许多与他们选择的号码相关的选项。为了尝试解决这个问题,我决定将他们的功能选择存储在一个名为 FeatureCart 的单独表中。

我一直在使用实体框架来检索和插入数据。可以通过剪切和粘贴此链接来查看数据模型(因为我是新手,Stackoverflow 只允许我发布两个链接)。

[ armourcreative.co.uk/EntityDesignerDiagram.bmp ]

我的问题是,有没有办法检索两个表并在网页中呈现结果,以便它像下面链接上的图像一样显示?

正是我想要实现的示例购物车渲染

我似乎只能得到两个 EntityDataSources 连接到同一页面上的 NumberFeatureView 和 NumberPackageView 呈现如下链接中的图像:

示例购物车呈现不是我要找的东西

如您所见,显示用户选择的方式不是很清晰,因为它没有将功能与其所属的电话号码相关联。

我的想法是根据与 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 回答