大家一起来探讨在在Asp.net中购物车的各种实现方法!

huangfei421 2003-08-06 11:55:44
我的购物车是通过session+vb.net的对象collection来实现的!
但在实现的过程中还存在一些问题,就是通过collection 来放置数据后。要想取出来进行相关的处理有些麻烦。


<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.sqlclient" %>
<script runat="server">

文件1: ct1.aspx
sub page_load()
dim conn as sqlconnection
dim comm as sqlcommand
dim datas as sqldatareader
dim coll as new collection
dim strconn as string
dim strcomm as string
strconn="server=;database=;uid=;pwd="
conn=new sqlconnection(strconn)
conn.open
strcomm="select *from tables where cls_flag=1 and cls_dadid=0 "
comm=new sqlcommand(strcomm,conn)
datas=comm.executereader()
do while datas.read
coll.add(datas.item("cls_name"))
loop
session("shoppingcart")=coll 'collection 对象放入session
conn.close
conn=nothing
comm=nothing
datas=nothing
coll=nothing
end sub

Sub Button1_Click(sender As Object, e As EventArgs)
response.redirect("ct2.aspx")
End Sub

</script>
<html>
<head>
</head>
<body>
<form runat="server">
<asp:Button id="Button1" onclick="Button1_Click"runat="server" Text="Button"></asp:Button>
</form>
</body>
</html>

文件2: ct2.aspx

<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.sqlclient" %>
<script runat="server">

sub page_load()
dim coll as new collection
dim dr as datarow
coll=session("shoppingcart")
dg.datasource=coll '设置datagrid控件数据源
dg.databind
end sub

</script>
<html>
<head>
</head>
<body>
<form runat="server">
<asp:DataGrid id="dg" runat="server">
</asp:DataGrid>
<!-- Insert content here -->
</form>
</body>
</html>
在文件ct2.aspx运行可以显示在ct1.aspx提取的数据,这说明数据已经通过collection对象传递到页面ct2.aspx
  但是我用另一种方法:dataset提取数据后,用下面的循环
   dim drow as datarow
dim collects as datarowcollection
  for i =0 to collects.count-1
  drow=collects.item(i)
   coll.add(drow)
   next
提取数据后在另一个页面放入datagrid控件却无法显示!
...全文
97 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangfei421 2003-08-12
  • 打赏
  • 举报
回复
没有人回答
wawaboss 2003-08-12
  • 打赏
  • 举报
回复
DataTable dataTable = new DataTable("My");
dataTable.Columns.Add("ProductId");
dataTable.Columns.Add("PName");
dataTable.Columns.Add("PMemberPrice");
dataTable.Columns.Add("PNumber");
for (int i = 0; i < Session.Count; i++)
{
DataRow dataRow = dataTable.NewRow();
productId = Session.Keys[i].ToString();
string str1 = Session[productId].ToString();
SqlDbCls sqlDbCls = new SqlDbCls(String.Concat("Select ProductId,PName,PMemberPrice from product where ProductId=", productId));
DataSet dataSet = new DataSet("My");
dataSet = sqlDbCls.SelectSql();
for (int j = 0; j < dataSet.Tables["My"].Rows.Count; j++)
{
dataRow[0] = dataSet.Tables["My"].Rows[j][0].ToString();
dataRow[1] = dataSet.Tables["My"].Rows[j][1].ToString();
dataRow[2] = dataSet.Tables["My"].Rows[j][2].ToString();
}
dataRow[3] = str1;
totalPrice += Int32.Parse(dataRow[2].ToString()) * Int32.Parse(str1);
dataTable.Rows.Add(dataRow);
}
Label1.Text = totalPrice.ToString();
myGrid.DataSource = dataTable;
myGrid.DataBind();
dataTable.Dispose();
huangfei421 2003-08-11
  • 打赏
  • 举报
回复
把选购的商品信息全部放在session中是否会加重服务器的负担,同时商品信息从session的读出和写入的程序量是比较大的,而且购物车中商品的修改也将很麻烦!同样还要创建对象datatable。这种做法对数据库的访问相对来说会减少一些,服务器内存的负担却加重了。
如果把商品信息全部放入到 vb.net对象collection去,数据库的访问会相应的增加,但session中的信息却会降低到只用存储一个逻辑变量用以判断是否有商品就可以了。那么就可以大大的减轻服务器内存的负担!同时对购物车的修改也会非常的方便。

junma03 2003-08-07
  • 打赏
  • 举报
回复
up
huangfei421 2003-08-07
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
用SESSION完全可以的,不用collection!

Sub CreateDataSource()
Dim strAll(), strCol() As String
dt.Columns.Add(New DataColumn("ID", GetType(Int32)))
dt.Columns.Add(New DataColumn("资源ID", GetType(Int32)))
dt.Columns.Add(New DataColumn("资源名称", GetType(String)))
dt.Columns.Add(New DataColumn("开始时间", GetType(DateTime)))
dt.Columns.Add(New DataColumn("结束时间", GetType(DateTime)))
dt.Columns.Add(New DataColumn("数量", GetType(Integer)))
strAll = Split(Session("allrec"), "|")
Dim i As Integer
For i = 0 To strAll.Length - 1
strCol = Split(strAll(i), ",")
If strCol.Length > 1 Then
dr = dt.NewRow()
dr(0) = i + 1
dr(1) = strCol(0)
dr(2) = strCol(1)
dr(3) = CDate(strCol(2))
dr(4) = CDate(strCol(3))
dr(5) = CInt(strCol(4))
dt.Rows.Add(dr)
End If
Next i
End Sub 'CreateDataSource

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧