查看: 867|回复: 12
|
shopping cart的问题(asp.net)
[复制链接]
|
|

我想说能否按了confirm button后,cart里所有的资料都能存入database(access)里,这有可能实现吗?
我做过但只能将textbox里的资料存入而不是cart里的资料。 |
|
|
|
|
|
|
|

楼主 |
发表于 3-5-2007 06:47 PM
|
显示全部楼层
这是cart的code:
Dim objDT As System.Data.DataTable
Dim objDR As System.Data.DataRow
Private Sub Page_Load(s As Object, e As EventArgs)
If Not IsPostBack Then
makeCart()
End If
End Sub
Function makeCart()
objDT = New System.Data.DataTable("Cart")
objDT.Columns.Add("ID", GetType(Integer))
objDT.Columns("ID").AutoIncrement = True
objDT.Columns("ID").AutoIncrementSeed = 1
objDT.Columns.Add("Quantity", GetType(Integer))
objDT.Columns.Add("Product", GetType(String))
Session("Cart") = objDT
End Function
Sub AddToCart(s As Object, e As EventArgs)
objDT = Session("Cart")
objDR = objDT.NewRow
objDR("Quantity") = txtQuantity.Text
objDR("Product") = txtProduct.Text
objDT.Rows.Add(objDR)
Session("Cart") = objDT
dg.DataSource = objDT
dg.DataBind()
End Sub
Sub Delete_Item(s As Object, e As DataGridCommandEventArgs)
objDT = Session("Cart")
objDT.Rows(e.Item.ItemIndex).Delete()
Session("Cart") = objDT
dg.DataSource = objDT
dg.DataBind()
End Sub |
|
|
|
|
|
|
|

楼主 |
发表于 3-5-2007 06:50 PM
|
显示全部楼层
Sub AddRecord(ByVal Sender As Object, ByVal E As EventArgs)
objDT = Session("Cart")
objDR = objDT.NewRow
objDR("Quantity") = txtQuantity.Text
objDR("Product") = txtProduct.Text
objDT.Rows.Add(objDR)
Session("Cart") = objDT
Dim objConn As New oleDbConnection
Dim sqlCmd as String
Dim objCmd As New OleDbCommand(sqlCmd,objConn)
objConn.C
objConn.ConnectionString+= "Data Source= " & Server.MapPath("Customers.mdb")
sqlCmd = "INSERT INTO product (ID, Categories) VALUES (@ID, @Categories)"
objCmd = New OleDbCommand(sqlCmd, objConn)
objCmd.Parameters.Add("@ID",objDR("Quantity"))
objCmd.Parameters.Add("@Categories", objDR("Product"))
objConn.Open()
objCmd.ExecuteNonQuery()
objConn.Close()
End Sub
这是我confirm button的code,我也知道这样子做的话只会存入textbox里的资料,所以想问问该怎么才能存入cart里所有的资料。 |
|
|
|
|
|
|
|
发表于 4-5-2007 12:57 AM
|
显示全部楼层
你的 Cart 是用 DataTable 嘛, 你可以 loop 你的 DataTable.Row 来取得全部的 item 呀,然后在用那些 cart item 来制作 sql。 |
|
|
|
|
|
|
|

楼主 |
发表于 4-5-2007 01:55 AM
|
显示全部楼层
谢谢,但还是不太明白,
怎么说loop DataTable.Row 来取得全部的 item?这点不明白。
可以的话能否在指教一下下?谢谢 |
|
|
|
|
|
|
|
发表于 4-5-2007 09:30 AM
|
显示全部楼层
原帖由 wcchyau 于 4-5-2007 01:55 AM 发表
谢谢,但还是不太明白,
怎么说loop DataTable.Row 来取得全部的 item?这点不明白。
可以的话能否在指教一下下?谢谢
你可以那样写
for (int x = 0; x < objDT.Rows.Count; x++) {
string sql = "INSERT INTO product (ID, Categories) VALUES ('" + objDT.Rows[x]["Quantity"].ToString() + "', '" + objDT.Rows[x]["Product"].ToString() + "')";
// execute sql here
}
以上是 C# 的 code, 自行把它转为 VB.NET 吧。。。 事因我写不惯 VB.NET 的 code。
[ 本帖最后由 goatstudio 于 4-5-2007 09:31 AM 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 4-5-2007 02:14 PM
|
显示全部楼层
好的,谢谢帮忙! |
|
|
|
|
|
|
|

楼主 |
发表于 4-5-2007 03:10 PM
|
显示全部楼层
for x = 0 to objDT.Rows.Count
sqlCmd = "INSERT INTO product (ID, Categories) VALUES ( @ID , @Categories )"
objCmd = New OleDbCommand(sqlCmd, objConn)
objCmd.Parameters.Add("@ID",objDT.Rows[x]["Quantity"].ToString())
objCmd.Parameters.Add("@Categories", objDT.Rows[x]["Product"].ToString())
Compiler Error Message: BC32017: Comma, ')', or a valid expression continuation expected.
这是我改成vb后的code,但出现这error,请问这error表示什么呢?还是我改错了? |
|
|
|
|
|
|
|

楼主 |
发表于 4-5-2007 08:44 PM
|
显示全部楼层
原来是这样
for x = 0 to objDT.Rows.Count
sqlCmd = "INSERT INTO product (ID, Categories) VALUES ( @ID , @Categories )"
objCmd = New OleDbCommand(sqlCmd, objConn)
objCmd.Parameters.Add("@ID",objDT.Rows(x)!Quantity.ToString())
objCmd.Parameters.Add("@Categories", objDT.Rows(x)!Product.ToString())
但这次的当按了confirm button后出现这种error
Exception Details: System.IndexOutOfRangeException: There is no row at position 2.(我add了2个item在cart里,如果是1个item的话就是1)
怎么回事呢?是不是for loop的问题呢?
[ 本帖最后由 wcchyau 于 4-5-2007 09:13 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 5-5-2007 09:17 AM
|
显示全部楼层
回复 #9 wcchyau 的帖子
把 for x = 0 to objDT.Rows.Count
改成 for x = 0 to objDT.Rows.Count - 1
必须减掉1... 因为ASP.Net是zero-based的... 也就是说我们算是从1开始算起... 但ASP.Net是从0算起...
试试看吧... |
|
|
|
|
|
|
|

楼主 |
发表于 5-5-2007 10:31 AM
|
显示全部楼层
原来如此,谢谢
但这样的话最只能将cart里最后一项item加入database里,而不能将全部一起加入。
比如说我之前加入了三项item,但confirm时只讲三项中的最后一项加入。 |
|
|
|
|
|
|
|
发表于 5-5-2007 10:44 AM
|
显示全部楼层
原帖由 wcchyau 于 5-5-2007 10:31 AM 发表
原来如此,谢谢
但这样的话最只能将cart里最后一项item加入database里,而不能将全部一起加入。
比如说我之前加入了三项item,但confirm时只讲三项中的最后一项加入。
我不知道你完整的Code是怎样... 但依照GoatStudio大师所提供的Code... 它应该会loop through你的DataTable... |
|
|
|
|
|
|
|

楼主 |
发表于 5-5-2007 11:09 AM
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|