我正在为我的酒店预订系统添加购物车页面。我有2张桌子,1张预订包含numofday,另一张桌子是包含房间名称和roomprice的房间。
对于添加到购物车,我必须检索两个表的值并将其加载到gridview中,然后计算单击按钮簿时的价格(price = numofday * roomprice。我正在使用会话。我遇到的困难面对的是,我将房间名称存储在roomprice的列中。
Protected Sub GridView1_SelectedIndexChanged(sender As Object, e As EventArgs)
Dim ds As DataSet = Nothing
If Session("sCart") Is Nothing Then
ds = New DataSet()
Dim dt As New DataTable()
dt.Columns.Add(New DataColumn("RoomName"))
dt.Columns.Add(New DataColumn("RoomPrice", GetType(System.Int32)))
dt.Columns.Add(New DataColumn("Numofday", GetType(System.Int32)))
dt.Columns.Add(New DataColumn("Total", GetType(System.Int32)))
ds.Tables.Add(dt)
Session("sCart") = ds
Else
ds = DirectCast(Session("sCart"), DataSet)
End If
Dim row As DataRow = ds.Tables(0).NewRow()
row("RoomName") = GridView1.Rows(GridView1.SelectedIndex).Cells(0).Text
row("RoomPrice") = GridView1.Rows(GridView1.SelectedIndex).Cells(0).Text
row("Numofday") = GridView1.Rows(GridView1.SelectedIndex).Cells(0).Text.ToString
row("Total") = CInt(row("Numofday") * row("RoomPrice"))
ds.Tables(0).Rows.Add(row)
End Sub
编辑;此错误现在正在发生:
答案 0 :(得分:0)
如上所述,您的索引已在.Cells(x)
上。你为每个人使用0。应更改这些值以表示正确的索引。但是,由于我不确定您的索引,我将使用x
。
我会先将您的RoomPrice
和Total
类型更改为Decimal
。从长远来看,Int32
可能不会给你你所追求的目标。
例如,将9.99作为Int32
存储将其舍入为10.通过存储为Decimal
,您将保留9.99。
更改这些内容以使用System.Decimal
:
dt.Columns.Add(New DataColumn("RoomPrice", GetType(System.Decimal)))
dt.Columns.Add(New DataColumn("Total", GetType(System.Decimal)))
接下来,我会使用Decimal.Parse设置RoomPrice
:
row("RoomPrice") = Decimal.Parse(GridView1.Rows(GridView1.SelectedIndex).Cells(x).Text.ToString())
我还会使用Int32.Parse设置Numofday
:
row("Numofday") = Int32.Parse(GridView1.Rows(GridView1.SelectedIndex).Cells(x).Text.ToString())
如果.Parse
没有给你你想要的东西,你可能想要考虑.TryParse
:
Dim s As String = "9.99"
Dim d As Decimal = 0D
If Not Decimal.TryParse(s, d) Then
'Failed to parse
End If
最后,您必须更改计算Total
的方式:
row("Total") = CInt(row("Numofday")) * CDec(row("RoomPrice"))
作为旁注,转Option Strict On:
将隐式数据类型转换限制为仅扩展转换,禁止后期绑定,并禁止导致Object类型的隐式类型。
编辑; OP已更新错误的屏幕截图。出现此错误的原因是因为尚未添加列Total
。这条线已经被注释掉了。 OP已经通过评论解决了这个问题。