2017-06-01 112 views
0

我正在爲我的酒店預訂系統添加購物車頁面。數據類型不匹配表

對於添加到購物車,我必須檢索這兩個表的值,並將其加載到一個gridview,然後計算當按鈕書被點擊時的價格(price = numofday * roomprice.I使用session.The難度我現在面臨的是,我被存儲到ROOMNAME 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

回答

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

將隱式數據類型轉換限制爲僅擴展轉換,不允許使用後期綁定,並且禁止導致Obje的隱式鍵入ct類型。

編輯; OP已更新錯誤的截圖。此錯誤的原因是因爲列Total尚未添加。這條線已被註釋掉。 OP已通過評論解決了這個問題。