Generic List an GridView binden - >

21/04/2008 - 17:45 von Andreas Hartje | Report spam
Hallo in die Runde,
vielleicht hat jemand einen Tipp für mich: ich habe Textboxen, deren Inhalt
ich in eine List speichere. Mittels kleinem Sessionmanagement habe ich es
geschafft, dass die List ihre Datensàtze behàlt und nicht nach jedem
Postback wieder eine neue List erstellt wird. Dummerweise hat bspw. nach dem
zweiten Abschicken der Textboxinhalte an die List auch der vorherige erste
Datensatz den gleichen Inhalt wie der zweite, gerade abgeschickte. Momentan
komme ich einfach nicht weiter. Ausgegeben wird alles über ein Gridview.
Hier ist der Code:

Public Class Person
Public lpers As New List(Of Person)
Private vorname As String
Private nachname As String
Private alter As String
Private geburtsort As String

Public Property GetPersVorname() As String
Get
Return vorname
End Get
Set(ByVal value As String)
vorname = value
End Set
End Property
Public Property GetPersNachname() As String
Get
Return nachname
End Get
Set(ByVal value As String)
nachname = value
End Set
End Property
Public Property GetPersAlter() As String
Get
Return alter
End Get
Set(ByVal value As String)
alter = value
End Set
End Property
Public Property GetPersGeburtsort() As String
Get
Return geburtsort
End Get
Set(ByVal value As String)
geburtsort = value
End Set
End Property

End Class

Dim p As New Person

Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
If IsNothing(Session("Person")) Then
Session("Person") = New Person
End If
p = Session("Person")
End Sub

Public Sub arrFill()
p.GetPersVorname = TextBox1.Text
p.GetPersNachname = TextBox2.Text
p.GetPersAlter = TextBox3.Text
p.GetPersGeburtsort = TextBox4.Text

p.lpers.Add(p)
GridView1.DataSource = p.lpers
GridView1.DataBind()
End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button1.Click
arrFill()

End Sub
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
21/04/2008 - 19:56 | Warnen spam
Hallo Andreas,

"Andreas Hartje" schrieb:

Dim p As New Person

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If IsNothing(Session("Person")) Then
Session("Person") = New Person
End If
p = Session("Person")
End Sub

Public Sub arrFill()
p.GetPersVorname = TextBox1.Text
p.GetPersNachname = TextBox2.Text
p.GetPersAlter = TextBox3.Text
p.GetPersGeburtsort = TextBox4.Text



p und Session( "Person" ) sind identisch, verweisen also auf dasselbe Objekt.
Ich denke mal, dass hier auch dein Problem liegt. D.h. wenn Du p.GetAbcDef
ànderst, hat auch Session("Person").GetAbcDef diesen neuen Wert.

Übernimm die einzelnen Werte manuell oder implementiere Clone, MemberwiseClone,
... Achte aber bei letzterem u.a. darauf, dass keine DeepCopy erstellt wird.
http://msdn2.microsoft.com/de-de/li...clone.aspx

BTW: GetIrgendwas ist für Properties, insbesondere, wenn diese nicht mal als
ReadOnly deklariert wurden, eine schlechte Wahl.

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen