如何在网格视图中限制的下拉列表中获取值?

时间:2013-12-01 17:12:25

标签: c# asp.net gridview data-binding drop-down-menu

在gridview内部有一个下拉列表

<asp:TemplateField HeaderText="Quantity">
    <ItemTemplate>
        <asp:DropDownList ID="quantity" runat="server" DataValueField="ItemID" DataTextField="Quantity">
        </asp:DropDownList>
    </ItemTemplate>
</asp:TemplateField>

对于每个itemid,数据库表的Quantity字段中有一些数值 我希望此下拉列表必须包含购物车中所有商品的值from 1 to quantity.DataTextField

gridview绑定的过程是

create proc [dbo].[prcItemsinCart](@CartID int)
as
    select distinct ct.Price,ct.Quantity,ct.ItemID,
           ct.CartID,ct.ProductID,p.ProductName,
           isnull((  select top 1 convert(varchar,PhotoID,10) + '.' + ExtName
                 from ProductPhoto 
                 where ProductID = ct.ProductID ),'NoImage.jpg'
           ) as Product, 
           ( Select Price*Quantity 
             from CartItems 
             where CartID=ct.CartID and ProductID=ct.ProductID
           ) as SubTotal
    from CartItems as ct 
    inner join ProductInfo as p on ct.ProductID=p.ProductID 
    inner join ProductPhoto as pp on ct.ProductID=pp.ProductID 
    where ct.CartID=@CartID

1 个答案:

答案 0 :(得分:0)

我会在HiddenField中添加TemplateField来保存CartID,我会在代码中使用CartID。我的标记应该如下:

<asp:TemplateField HeaderText="Quantity">
    <ItemTemplate>  
        <asp:HiddenField ID="hdnId" runat="server" value='<%#Eval("CartID") %>'></asp:HiddenField>                            
        <asp:DropDownList ID="quantity" runat="server" DataValueField="ItemID" DataTextField="Quantity">
        </asp:DropDownList>
    </ItemTemplate>
</asp:TemplateField>

在代码中,在GridView的RowDataBound中,我找到了DropDownListHiddenField,运行了一个Sql Query来获取我的预期数据,并将它们绑定到我的DropdownList

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DropDownList quantity = e.Row.FindControl("quantity") as DropDownList;
        HiddenField hdnId = e.Row.FindControl("hdnId") as HiddenField;

        if (quantity != null && hdnId != null)
        {
            string queryString = String.Format("SELECT ItemID, Quantity FROM  CartItems  WHERE CartID= {0}", hdnId.Value);

            //MyConnectionString is your connection string in web.config
            using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString()))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                quantity.DataSource = reader;
                quantity.DataValueField = "ItemID";
                quantity.DataTextField = "Quantity";
                quantity.DataBind();               
            }
        }        

    }
}