2016-06-04 13 views
0

Ich habe ein Webformular für die Eingabe von Rechnungsinformationen zu einem DB.Hinzufügen von DataRow einzeln zu DataTable

Ich habe 3 Textfelder, die Produktmenge, Produkt und Preis anfragen.

Ich habe mich entschieden, eine DataTable zu erstellen, um die Menge, productId, price vorübergehend zu speichern, so dass der Benutzer N Produkte für das spätere Speichern der Daten auf der DataTable (in einem Raster angezeigt) zur Datenbank hinzufügen kann.

Ich weiß nicht, was ich falsch mache, aber ich bin nicht in der Lage, ein zweites Produkt zu speichern. Nachdem ich eine Zeile in der DataTable gespeichert habe, wird die zweite nicht hinzugefügt, sondern die erste überschrieben. Ich weiß, dass dies etwas sehr dummes von mir sein muss, aber ich habe nicht herausgefunden, was ich falsch mache und bin ein Anfänger.

Public Class IngresoFacturas 
    Inherits System.Web.UI.Page 
    Dim miDataTable = New DataTable 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     miDataTable.Columns.Add("dCantidad", GetType(System.Int32)) 
     miDataTable.Columns.Add("idProducto", GetType(System.Int32)) 
     miDataTable.Columns.Add("mTotal", GetType(System.Decimal)) 

    End Sub 

    Protected Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click 

     miDataTable.Rows.Add(RadNumericTextBox2.Text, Int32.Parse(RadAutoCompleteBox2.Entries.Item(0).Value), RadNumericTextBox3.Text) 
     RadGrid1.Rebind() 'Forces rebind to update Grid 
     RadAutoCompleteBox2.Entries.Clear() 
     RadNumericTextBox2.Text = "" 
     RadNumericTextBox3.Text = "" 

    End Sub 

    Protected Sub RadGrid1_NeedDataSource(sender As Object, e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource 

     RadGrid1.DataSource = miDataTable 

    End Sub 
End Class 
+0

WebForms immer eine neue Instanz der Klasse erstellen, 'IngresoFacturas' in Ihrem Fall, bei jeder Anfrage . Erstellen Sie in Ihrem Code immer eine neue DataTable bei jeder Anfrage. – Fabio

+0

Danke Fabio. Irgendwelche Ideen, wie man das umgeht? Speichern yo xml oder eine andere Idee ?? – TikalDog

Antwort

-1

Etwas Ähnliches könnte helfen:

Dim miDataTable As DataTable 

Sub PrepareDT() 
    miDataTable = New DataTable 
    miDataTable.Columns.Add("dCantidad", GetType(System.Int32)) 
    miDataTable.Columns.Add("idProducto", GetType(System.Int32)) 
    miDataTable.Columns.Add("mTotal", GetType(System.Decimal)) 

End Sub 

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 
    If Not Page.IsPostBack Then 
     PrepareDT() 
    End If 

End Sub 

(und den Code aus dem Page_Load Methode entfernen), so dass Sie nur "Reset" miDataTable auf dem ersten Zugriff auf die Seite.

0

Andreas Lösung versucht, aber es didn t {arbeiten, so kam ich dazu angestiftet:

Alles, was ihr Jungs mich über die Verwendung von Viewstate, diese zu lösen warnen konnte. Es arbeitet .... aber don {t wissen, ob es {ist der beste Ansatz

Public Class IngresoFacturas 
Inherits System.Web.UI.Page 
Dim miDataTable As DataTable 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not Page.IsPostBack Then 
     miDataTable = New DataTable 
     miDataTable.Columns.Add("dCantidad", GetType(System.Int32)) 
     miDataTable.Columns.Add("idProducto", GetType(System.Int32)) 
     miDataTable.Columns.Add("mTotal", GetType(System.Decimal)) 
     ViewState("tabla") = miDataTable 
    End If 

End Sub 

Protected Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click 
    miDataTable = ViewState("tabla") 
    miDataTable.Rows.Add(RadNumericTextBox2.Text, Int32.Parse(RadAutoCompleteBox2.Entries.Item(0).Value), RadNumericTextBox3.Text) 
    RadGrid1.Rebind() 'Forces rebind to update Grid 
    ViewState("tabla") = miDataTable 
    RadAutoCompleteBox2.Entries.Clear() 
    RadNumericTextBox2.Text = "" 
    RadNumericTextBox3.Text = "" 

End Sub 

Protected Sub RadGrid1_NeedDataSource(sender As Object, e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource 

    RadGrid1.DataSource = miDataTable 

End Sub 

End Class