刚学习ASP.NET不久,这是我写的一个简单的购物车程序,上面只有两个GridView控件和一个LinkButton按钮,显示图书的GridView1控件中有一个模板列增加一个购买按钮,单击购买按钮可以购买一次,单击查看购物车也可以看到购买的信息,不过再次点击购买第二次的时候,或者购买同一商品第二次,再查看购物车时GridView2中没有了任何购物信息,若有高手对此有兴趣,可以帮忙一起研究一下,给些实质性的修改意见,最好能附加上代码,让大家共同学习,不盛感激!
//前台代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ProductList.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="Microsoft.Web.Atlas" Namespace="Microsoft.Web.UI" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>简单的购物车</title>
</head>
<body>
<form id="form1" runat="server">
<div style="text-align: left">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Height="108px"
ShowHeader="False" Width="728px" OnRowCommand="GridView1_RowCommand" DataKeyNames="BookId">
<Columns>
<asp:ImageField DataImageUrlField="BookImg" >
<ItemStyle HorizontalAlign="Center" />
</asp:ImageField>
<asp:BoundField DataField="BookId" Visible="False" />
<asp:BoundField DataField="BookName" />
<asp:BoundField DataField="BookAuthor" />
<asp:BoundField DataField="BookPrice" />
<asp:TemplateField>
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="buy" CommandArgument='<%# Eval("BookId") %>'>购 买</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click" Width="81px">查看购物车</asp:LinkButton>
<br />
<br />
<asp:GridView ID="GridView2" runat="server" Height="153px" Width="744px">
</asp:GridView>
</div>
</form>
</body>
</html>
==========================================
//后台程序代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SqlConnection myConn = new SqlConnection("server=.;uid=sa;pwd=;database=book");
myConn.Open();
SqlCommand selCmd = new SqlCommand("select * from shop_book", myConn);
SqlDataReader sdr = selCmd.ExecuteReader();
this.GridView1.DataSource = sdr;
this.GridView1.DataBind();
myConn.Close();
}
}
private DataTable createProductDT()//建立购物车
{
DataTable dtProducts = new DataTable();
DataColumn productColumn = new DataColumn();
productColumn.DataType = System.Type.GetType("System.Int32");
productColumn.ColumnName = "id";
productColumn.Unique = true;
dtProducts.Columns.Add(productColumn);
productColumn = new DataColumn();
productColumn.DataType = System.Type.GetType("System.String");
productColumn.ColumnName = "name";
dtProducts.Columns.Add(productColumn);
productColumn = new DataColumn();
productColumn.DataType = System.Type.GetType("System.Decimal");
productColumn.ColumnName = "price";
dtProducts.Columns.Add(productColumn);
productColumn = new DataColumn();
productColumn.DataType = System.Type.GetType("System.Int32");
productColumn.ColumnName = "quantity";
dtProducts.Columns.Add(productColumn);
//使"id"成为主键
DataColumn[] pkColumns = new DataColumn[1];
pkColumns[0] = dtProducts.Columns["id"];
dtProducts.PrimaryKey = pkColumns;
return dtProducts;
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "buy")//GridView1中有一个购买的按钮
{
int BookId = Convert.ToInt32(e.CommandArgument);
AddProduct(BookId);
}
}
private void AddProduct(int BookId)//添加信息到购物车之中
{
DataTable dtProducts = createProductDT();
DataRow newRow = dtProducts.NewRow();
if (Session["dtProducts"] != null)
{
for (int i = 0; i < dtProducts.Rows.Count; i++)
{
if (Convert.ToInt32(dtProducts.Rows[i]["id"]) == BookId)
{
dtProducts.Rows[i]["quantity"] = Convert.ToInt32(dtProducts.Rows[i]["quantity"]) + 1;
break;
}
}
}
else
{
DataRow drProduct = dtProducts.Rows.Find(BookId);
DataRow tempTr = getBookDetails(BookId);
newRow[0] = BookId;
newRow[1] = tempTr["BookName"];
newRow[2] = tempTr["BookPrice"];
newRow[3] = 1;
dtProducts.Rows.Add(newRow);
}
//把产品存储到Session
Session["dtProducts"] = dtProducts;
}
public DataRow getBookDetails(int BookId)//获取数据库中图书的信息填充到DataTable中
{
SqlConnection myConn = new SqlConnection("server=.;uid=sa;pwd=;database=book");
myConn.Open();
string selCmd="select BookName,BookPrice from shop_book where BookId="+BookId;
SqlDataAdapter sda = new SqlDataAdapter(selCmd,myConn);
DataSet ds = new DataSet();
sda.Fill(ds);
return ds.Tables[0].Rows[0];
}
protected void LinkButton2_Click(object sender, EventArgs e)//单击这个按钮可以查看购物车中的信息
{
this.GridView1.Visible = false;
this.GridView2.DataSource = (DataTable)Session["dtProducts"];//用来显示购物车中的内容
this.GridView2.DataBind();
}