ASP.NET - 从DataList值

时间:2016-01-30 14:47:22

标签: c# asp.net drop-down-menu webforms

我在自己的婚礼网站上工作,所以我们可以让我们的客人从我们的礼物清单中保留物品(这是我们将在蜜月期间做的事情)并在当天给我们检查。

我有一个DataList,它从我的MSSQL中检索一个表并在我的aspx页面上显示它。此表中存储的值之一是数量。

我想要的是能够填充asp:DropDownList,其中包含Quantity字段中的选项数量,然后单击一个按钮,这会将该项目的X添加到购物车(购物车运行正常,带有添加一个选项的按钮) 。我挣扎的地方实际上正在填充下拉列表。我目前的思路是让C#函数根据数量在for循环中添加新项目。

以下是我正在尝试的内容

ASPX

<asp:DataList ID="DataList2" runat="server" DataKeyField="pKey"  DataSourceID="WeddingDatabase">
    <ItemTemplate>
        <div class="Gift"> 
            <!-- Other fields ignored for purpose of quesion -->                  
            Quantity:
            <asp:Label ID="QuantityLabel" runat="server" Text='<%# Eval("Quantity") %>' />
            <br />

            <asp:DropDownList ID="QuantityDropdown" runat="server" />
            <% FillDropdown((int)Eval("Quantity")); %>
            <br />

            <asp:Button ID="Btn" runat="server" Text="Add to Cart" CommandArgument='<%# Eval("pKey") %>' OnCommand="AddToCart" />
        </div>
    </ItemTemplate>
</asp:DataList>

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
ConnectionString="<%$ ConnectionStrings:DB_9EF896_weddingConnectionString %>" 
SelectCommand="SELECT * FROM [Giftlist] ORDER BY [Title] ASC"></asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource3" runat="server"></asp:SqlDataSource>

aspx.cs

    public void FillDropdown(int inQuantity)
    {
        DropDownList dropdown = this.FindControl("QuantityDropdown") as DropDownList;

        for (int i = 0; i < inQuantity; i++)
        {
            dropdown.Items.Add(new ListItem("" + (i+1)));
        }            
    }

现在我正努力让它编译。虽然我知道自己想要做什么,但是我的代码在这里占了上风。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

为什么不配置另一个SqlDataSource并将其绑定到您的下拉列表,如

<asp:SqlDataSource ID="SqlDataSource3" runat="server" 
ConnectionString="<%$ ConnectionStrings:DB_9EF896_weddingConnectionString %>" 
SelectCommand="SELECT distinct quantity FROM [Giftlist]"></asp:SqlDataSource>


<asp:DropDownList DataValueField="quantity" SelectedValue='<%# Eval("quantity") %>'
ID="QuantityDropdown" runat="server" DataSourceID="SqlDataSource3"
DataTextField="quantity"></asp:DropDownList>

答案 1 :(得分:0)

我的解决方案是通过C#函数设置DataSource,传递Datalist中该项目的数量。

ASPX

<asp:DropDownList ID="QuantityDrop" runat="server" DataSource='<%# FillDropdown((int)Eval("Quantity")) %>' />

C#(aspx.cs)

public ArrayList FillDropdown(int inCount)
{
    ArrayList values = new ArrayList();

    for (int i = 0; i < inCount; i++)
    {
        values.Add("" + (i + 1)); // increment i and add.
    }

    return values;
}