【发布时间】:2016-09-15 16:31:22
【问题描述】:
我是 asp.net 的新手。我正在尝试编写购物车。到目前为止,我能够在网格视图中显示我的项目,但是我是通过一个 no datasource 的列表来实现的。
假设我的商店页面显示我的 Gridview,其中包含 ID、名称、价格等列,然后是数量的模板字段。
然后,我只想获取文本框数量填充了某个数字的行,并仅将这些行显示到我的 ShoppingCart 页面上的另一个 gridview 上。
因此,在数量文本框中没有任何输入的其他项目不应出现在购物车页面上。这是我的代码:
Shop.aspx
<asp:GridView ID="gvProducts" runat="server" AutoGenerateColumns="False" >
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" />
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="Price" DataFormatString="{0:c2}" HeaderText="Price" />
<asp:TemplateField HeaderText="Quantity">
<ItemTemplate>
<asp:TextBox ID="txtQuant" runat="server">
</asp:TextBox>
<asp:CompareValidator runat="server" Operator="DataTypeCheck" Type="Integer"
ControlToValidate="txtQuant" ErrorMessage="Value must be a whole number" ForeColor="Red"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<br />
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
<asp:Button ID="btnAdd" runat="server" Text="Add To Cart" OnClick="btnAdd_Click" />
Shop.aspx.cs
// go through each product row
foreach (GridViewRow Products in gvProducts.Rows)
{
string tb = (gvProducts.FindControl("txtQuant") as TextBox).Text; //get tb value
if (tb == null) // if textbox is null
{
}
else
{
List<string> selecteditems = new List<string>();//create a list called addeditems
selecteditems.Add(tb);
string[] addeditems = selecteditems.ToArray();//convert list to array
Session["ShoppingCart"] = addeditems; // save arraylist as session called ShoppingCart
}
}
Response.Redirect("~/ShoppingCart.aspx");
ShoppingCart.aspx
<asp:GridView ID="gvProductsList" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" />
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="Price" DataFormatString="{0:c2}" HeaderText="Price" />
<asp:BoundField DataField="Quantity" HeaderText="Quantity" />
<asp:TemplateField HeaderText="Product Total">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Label ID="lblTotal" runat="server" Text="Order Total: "></asp:Label>
<p> </p>
<asp:Button ID="btnBack" runat="server" Text="Keep Shopping" OnClick="btnBack_Click" />
<asp:Button ID="btnDone" runat="server" Text="Done" OnClick="btnDone_Click" />
ShoppingCart.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (Session["ShoppingCart"] == null)
{
Response.Write("Your Shopping Cart is empty");
}
else
{
string[] addeditems = (string[])Session["ShoppingCart"];//call the session back
gvProductsList.DataSource = addeditems;
gvProductsList.DataBind();
}
}
【问题讨论】:
-
您能否展示您的绑定代码
gvProducts,您是如何绑定的?另一件要清除的事情是,您仅在Session["ShoppingCart"]中保存了数量字段,因此它从 ShoppingCart.aspx 页面中获取 ID、名称、价格为gvProductsList以绑定 GridView。 -
绑定gvProducts背后的代码(get Details是我的Products类中列表的名称):protected void Page_Load(object sender, EventArgs e)//绑定列表到gridview { gvProducts.DataSource = Products.getDetails(); gvProducts.DataBind(); }
-
我对如何绑定ID、名称和价格有点困惑。我有 2 个课程,产品和购物车。在 Products 类中,我有获取和设置 int ID、string Name 和 double Price 的方法,然后是产品列表。在 Shopping Cart 类中,我有 public Products Item { get;放; } 公共 int 数量 { 获取;放; }