数据类型与表中的数据类型不匹配

时间:2017-06-01 01:46:21

标签: asp.net vb.net

我正在为我的酒店预订系统添加购物车页面。我有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

enter image description here

编辑;此错误现在正在发生:

enter image description here

1 个答案:

答案 0 :(得分:0)

如上所述,您的索引已在.Cells(x)上。你为每个人使用0。应更改这些值以表示正确的索引。但是,由于我不确定您的索引,我将使用x

我会先将您的RoomPriceTotal类型更改为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已经通过评论解决了这个问题。