2017-06-01 9 views
0

のものと一致しません私のホテルの予約システムのためにカートに追加ページをしています.2つのテーブルがあり、1つの予約はnumofdayを含み、もう1つのテーブルはroomnameとroompriceを含むルームです。データ型がテーブル

カートに追加するには、両方のテーブルの値を取得してgridviewにロードし、ボタンブックがクリックされたときに価格を計算する必要があります(price = numofday * roomprice.I session.The難易度を使用しています直面していますが、私はそれがroompriceの列にroomnameを格納していることである

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))) 

次私はRoomPriceを設定するためにDecimal.Parseを使用します。

row("RoomPrice") = Decimal.Parse(GridView1.Rows(GridView1.SelectedIndex).Cells(x).Text.ToString()) 

私もNumofdayを設定するためにInt32.Parseを使用します。

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を計算する方法に変更する必要があります:Option Strict Onを回し、サイドノートとして

row("Total") = CInt(row("Numofday")) * CDec(row("RoomPrice")) 

を:

暗黙のデータ型変換を拡張変換のみに制限し、レイトバインディングを禁止し、暗黙の型指定を禁止することでObje ctタイプ。

編集; OPがエラーのスクリーンショットで更新されました。このエラーの原因は、列Totalが追加されていないためです。この行はコメントアウトされています。これはコメントを通してOPと解決されました。

関連する問題