2013-10-22 103 views
0

我需要幫助,我正在編寫我的網站的一部分。我有一個用sqlServerDataSource填充的listBox_Products。當我點擊一個產品時,它會沿着帶有productPrice和productName的gridview顯示相應的圖片。 gridview是在代碼隱藏的indexChange事件中以編程方式編寫的數據綁定。我有一個按鈕,addToShoppingCart。在button_Click事件中,我想將用戶選擇的項目添加到購物車(它位於同一頁面上),我有第二個gridView,它接收用戶選擇並顯示的項目。這是我卡住的地方。我知道我不能追加到gridview,我知道它必須是數據綁定。我的邏輯是這樣的:獲取用戶選擇的第一個項目,將其添加到數據表,插入到第二個gridview。現在,如果用戶選擇另一種產品,除了這次是相同的邏輯,我會添加一個新行,並將新數據添加到新行,並保留舊行。問題是我無法弄清楚如何做到這一點。我對數據表不是很有經驗。asp.net網格視圖和dataList

這是我的代碼背後。

這是我的代碼從SQL服務器獲得的產品:

Private Sub GetProducts() 

    Dim TechShopConnectionString As String = ConfigurationManager.ConnectionStrings("Zapata_IT_DataBaseConnectionString").ConnectionString 
    Dim TechCon As New SqlConnection(TechShopConnectionString) 
    Dim TechCmd As New SqlCommand() 

    Dim index As Integer = ListBox_Products.SelectedIndex() 

    TechCmd.CommandType = CommandType.StoredProcedure 
    TechCmd.CommandText = "GetAllProductInformationByID" 
    TechCmd.Parameters.Add("@ProductID", SqlDbType.Int).Value = index 
    TechCmd.Connection = TechCon 

    Try 
     TechCon.Open() 
     GridView2.EmptyDataText = "No Records Found" 
     GridView2.DataSource = TechCmd.ExecuteReader() 
     GridView2.DataBind() 

    Catch ex As Exception 
     Throw ex 
    Finally 
     TechCon.Close() 
     TechCon.Dispose() 
    End Try 
End Sub 

這是我的代碼項添加到第二個GridView控件:

Protected Sub Button_AddToCart_Click(sender As Object, e As EventArgs) Handles Button_AddToCart.Click 
    Dim conn As SqlConnection = Nothing 
    Dim index As Integer = ListBox_Products.SelectedIndex() 

    Try 
     Dim connString As String = ConfigurationManager.ConnectionStrings("Zapata_IT_DataBaseConnectionString").ConnectionString 
     conn = New SqlConnection(connString) 
     Dim cmd As SqlCommand = New SqlCommand() 

     cmd.CommandType = CommandType.StoredProcedure 
     cmd.CommandText = "GetAllProductInformationByID" 
     cmd.Parameters.Add("@ProductID", SqlDbType.Int).Value = index 
     cmd.Connection = conn 

     conn.Open() 
     Dim dr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection) 
     Dim dr2 As DataRow 

     dataTableCheckOut.NewRow() 
     dataTableCheckOut.Load(dr, LoadOption.OverwriteChanges) 

     GridView_CheckOut.DataSource = dataTableCheckOut 
     GridView_CheckOut.DataBind() 

    Catch ex As SqlException 

    Catch ex As Exception 

    Finally 
     conn.Close() 
    End Try 

    ' Enter code here 

正如你可以看到我敢丟失。我知道邏輯很好,但我無法弄清代碼。

任何幫助,將不勝感激。

回答

0

如果您想要保留關於用戶購物車中頁面之間的內容(您應該需要)的信息,您應該將用戶購物車中的項目保存到數據庫。如果你去Amazon.Com,在你的購物車中添加一些東西,然後再回來,甚至在另一個compter上,你可以根據你的登錄信息看到你的購物車中的物品。

既然您知道如何從數據庫中讀取數據,這對您應該很容易。只需將信息添加到這個新的購物車表,並在需要時閱讀。也許每個頁面都顯示項目的數量,您只需要計數,但在查看購物車時,您需要顯示所有信息。

+0

謝謝。說得通。我會給它一個鏡頭。無論哪種方式,你知道任何方式來做我最初雖然約?謝謝。 – user2892837

+0

是的,如果你的網格綁定到一個數據表,你可以使用'datatable.NewRow'來添加新的行,但是在新記錄中填寫你的默認數據後,你必須調用'datatable.Rows.Add({你的新行})'。一個問題是網格不會知道有新的記錄,因爲你的數據源(DataTable)沒有實現INotifyCollectionChanged。所以,你必須設置datasource = Nothing,然後將其更改回數據表。我會建議使用ObservableCollection或BindingSource來避免重置DataSource。或者等等,你在做ASP。 – Steve

+0

...你的下一個問題將是如何保持頁面之間的數據,參考上面的答案。 – Steve