我的购物车是通过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控件却无法显示!
用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
up
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();