LinQ2SQL - ich verstehe es nicht...

27/02/2009 - 12:55 von Harald Bacik | Report spam
Hallo
Sorry für den schlechten Betreff, aber ich wusste nicht, was sonst passend
wàre.
Ich sitze jetzt seit einer Woche vor dem folgendem Problem & habe absolut
keinen Schimmer warum.
Ich verarbeite Daten an eine Bindingsource & von dort aus an ein Grid eines
Drittherstellers.
Folgende Sub funktioniert einwandfrei:

Overridable Sub SetDetaildaten(ByVal sender As Object, ByVal Auftrag As
VOPT.frmArtikelSuchen.Auftrag, Optional ByVal Warning As Boolean = True)
If (sender Is cmdArtikelre) Or (sender Is cmdArtikelli) Or (Warning
= True) Then
Dim Antw As MsgBoxResult = MsgBox("ACHTUNG! - Wenn Sie Glàser
direkt aus der " & Environment.NewLine & _
"Artikelsuche übernehmen, kann
keine " & Environment.NewLine & _
"Beschichtung in ein
Bestellprogramm " & Environment.NewLine & _
"übernommen werden! " &
Environment.NewLine & _
"Sind Sie sicher, dass Sie
dennoch " & Environment.NewLine & _
"die Artikelsuche vortsetzen
möchten?", MsgBoxStyle.Information + _
MsgBoxStyle.YesNo,
"Empfehlung: Glàser suchen")
If Antw = MsgBoxResult.No Then
Exit Sub
End If
End If
Dim frm As New frmArtikelSuchen(Auftrag)
Dim Artikel As New usrArtikelEingabe
Artikel.Dock = DockStyle.Fill
frm.pnlArtikelEingabe.Controls.Add(Artikel)
Dim Antwort As MsgBoxResult = frm.ShowDialog
If Antwort = MsgBoxResult.Ok Then
Dim dAuftrag As VOPT.myDataContext.auftrag = bsAuftrag.Current
Dim item As Integer
For i As Integer = 1 To 3
If (i = 1 And frm.Rechts = True) Or (i = 2 And frm.Links =
True) _
Or (i = 3 And frm.Fassung = True) Then
item = i
Dim dRow As VOPT.myDataContext.auftragdetail = Nothing
If dAuftrag.auftragdetails.Count > 0 Then
Try
dRow = (From Query In dAuftrag.auftragdetails
Where _
Query.zuordnung = item Select
Query).Single
Catch

End Try
End If
Dim Detail As New VOPT.myDataContext.auftragdetail With
{.invnr = Artikel.InvNr, _

.lieferant = Artikel.Lieferant, _

.artikelnr = Artikel.ArtikelNummer, _

.groesse = Artikel.Grösse, _

.farbe = Artikel.Farbe, _

.ArtikelBezeichnung = Artikel.Artikelbezeichnung, _

.icode = Artikel.Code, _

.Preis = Artikel.Preis, _

.artikelid = Artikel.ID, _

.menge = 1, _

.zuordnung = i, _

.Zeitstempel = Now}

If dRow IsNot Nothing Then
dRow = Detail
Else
dAuftrag.auftragdetails.Add(Detail)
End If
End If

Next
End If
grdArtikelBeschreibungRe.Refetch()
grdArtikelBeschreibungLi.Refetch()
End Sub
Wenn diese Sub ausgeführt wird, sehe ich die Daten auf dem Schirm
Bei folgender Sub funktioniert das nicht:

#Region "Overridable Sub Glasimport()"
Overridable Sub Glasimport()
If Not (txtsphre.Value = 0 And txtcylre.Value = 0) Or _
Not (txtsphli.Value = 0 And txtcylli.Value = 0) Then


Dim Daten As frmIPROGlaswahl.AuftragsDaten
Daten.Sph_re = Me.txtsphre.Value
Daten.Cyl_re = Me.txtcylre.Value
Daten.Achse_re = Me.txtAchsere.Value
Daten.Sph_li = Me.txtsphli.Value
Daten.Cyl_li = Me.txtcylli.Value
Daten.Achse_li = Me.txtAchseli.Value

Me.Cursor = Cursors.WaitCursor
Dim Glàser As New frmIPROGlaswahl(Daten)

Dim Antwort As MsgBoxResult
Antwort = Glàser.ShowDialog()

Me.Cursor = Cursors.Default

If Antwort = MsgBoxResult.Yes Then
Dim Artikel As New clsBefehle.Artikel
Dim ArtStamm As New clsBefehle
Artikel = ArtStamm.GetArtikel(Glàser.InvNr,
Glàser.Lieferant, Glàser.CodeRe, _
Glàser.GrösseRe, Glàser.FarbeRe)
If Artikel.DivArt = 1 Then
Artikel.ArtikelBezeichnung = InputBox("Geben Sie die
Artikelbezeichnung " & _
"für den gewàhlten
Artikel ein: " & _

Environment.NewLine & "Maximale " & _
"Lànge der
Beschreibung sind 30 Zeichen", _
"Optionale
Artikelbezeichnung", _

Artikel.ArtikelBezeichnung)
If Artikel.ArtikelBezeichnung.Length > 30 Then
Artikel.ArtikelBezeichnung =
Artikel.ArtikelBezeichnung.Substring(0, 30)
End If
End If
Dim dAuftrag As VOPT.myDataContext.auftrag = bsAuftrag.Current

For i As Integer = 1 To 2
If (i = 1 And Glàser.RechtsÜbernehmen = True) Or (i = 2
And Glàser.LinksÜbernehmen = True) Then
Dim item As Short = i
Dim dRow As myDataContext.auftragdetail = Nothing
If dAuftrag.auftragdetails.Count > 0 Then
Try
dRow = (From Query In
dAuftrag.auftragdetails Where _
Query.zuordnung = item Select
Query).Single
Catch

End Try
End If
Dim Detail As New myDataContext.auftragdetail With
{.artikelid = Artikel.ID, _

.invnr = Glàser.InvNr, _

.lieferant = Glàser.Lieferant, _

.artikelnr = IIf(item = 1, Glàser.CodeRe, Glàser.CodeLi), _

.groesse = CStr(IIf(item = 1, Glàser.GrösseRe, Glàser.GrösseLi)), _

.farbe = IIf(item = 1, Glàser.FarbeRe & Glàser.BeschichtungRe, Glàser.FarbeLi
& Glàser.BeschichtungLi), _

.glasentspiegelung = IIf(item = 1, Glàser.BeschichtungRe,
Glàser.BeschichtungLi), _

.glasgroesse = CInt(IIf(item = 1, Glàser.GrösseRe, Glàser.GrösseLi)), _

.Preis = IIf(item = 1, IIf(Artikel.DivArt = 0, Artikel.Preis,
Glàser.PreisRe), IIf(Artikel.DivArt = 0, Artikel.Preis, Glàser.PreisLi)), _

.menge = 1, _

.zuordnung = item, _

.icode = Artikel.iCode, _

.ArtikelBezeichnung = Artikel.ArtikelBezeichnung, _

.Zeitstempel = Now}

IIf(item = 1, IIf(Artikel.DivArt = 0,
txtPreisre.Enabled = False, txtPreisre.Enabled = True), _
IIf(Artikel.DivArt = 0,
txtPreisli.Enabled = False, txtPreisli.Enabled = True))

If dRow IsNot Nothing Then
dRow = Detail
Else
dAuftrag.auftragdetails.Add(Detail)
End If

End If
Next
grdArtikelBeschreibungRe.Refetch()
grdArtikelBeschreibungLi.Refetch()

End If
Else
MsgBox("Bevor die Glasberechnung starten kann, wird mind. 1 Wert
benötigt", _
MsgBoxStyle.Information, "Fehlende Werte")
End If
End Sub
#End Region

Da habe ich zwar auch die Daten in der Bindingsource, sie werden aber nicht
am Schirm angezeigt. - Ich habe schon bindingsoucre.CurrencyManager.Refresh
probiert, bringt nichts -> ich verstehe es einfach nicht, warum funktioniert
die eine Sub, die andere aber nicht... - Bitte helft mir... -> Ich weiß, es
ist viel verlangt, das zu lesen, aber vielleicht seht ihr ja etwas, das ich
übersehe. - Oder habt einen Tipp, wie ich die Bindingsource dazu bringen
kann, die Daten erneut zu lesen.

DANKE
 

Lesen sie die antworten

#1 Peter Fleischer
01/03/2009 - 09:09 | Warnen spam
"Harald Bacik" schrieb im
Newsbeitrag news:

Ich sitze jetzt seit einer Woche vor dem folgendem Problem & habe absolut
keinen Schimmer warum.



Hi Harald,
schalte erst einmal Option Strict On ein und beseitige die Fehler.
Vielleicht wird danach das Problem deutlicher.

Da die Programme nur Auszüge sind, ist es sehr schwer zu erkennen, was da
noch passiert.

If Not (txtsphre.Value = 0 And txtcylre.Value = 0) Or _
Not (txtsphli.Value = 0 And txtcylli.Value = 0) Then

Von welchem Typ sind die Objekte txtxxx ?

Dim Daten As frmIPROGlaswahl.AuftragsDaten
Daten.Sph_re = Me.txtsphre.Value
Daten.Cyl_re = Me.txtcylre.Value
Daten.Achse_re = Me.txtAchsere.Value
Daten.Sph_li = Me.txtsphli.Value
Daten.Cyl_li = Me.txtcylli.Value
Daten.Achse_li = Me.txtAchseli.Value

Me.Cursor = Cursors.WaitCursor
Dim Glàser As New frmIPROGlaswahl(Daten)

Warum nutzt du hier Strukturen für die Parameterübergabe? Umlaute in den
Bezeichnern funktionieren zwar im Framework. Aus schlechter Erfahrung in
früheren Programmiersystemen habe ich mir eine Namensgebung ohne lokale
Zeichen angewohnt.

Artikel = ArtStamm.GetArtikel(Glàser.InvNr, Glàser.Lieferant,
Glàser.CodeRe, _
Glàser.GrösseRe, Glàser.FarbeRe)

Kannst du hier nicht einen Typ (Klasse) anstelle der Struktur nutzen, die
von mehreren Klassen genutzt wird? Dannvereinfacht sich die Übergabe und
Übersichtlichkeit.

Artikel.ArtikelBezeichnung = InputBox("Geben ...

Solche Monster (Zeichenketten für InputBox) würde ich vereinfachen und
besser mit String.Format vorher zusammenbauen. Auf InputBox aus zeiten der
Konsolenanwendungen würde ich ganz verzichten, da ja eine Oberflàche
vorhanden ist. Dort kann man die Daten auch eingeben.

... Artikel.ArtikelBezeichnung.Substring(0, 30)

Mit der VB.Left-Funktion làsst sich das vereinfachen.

If (i = 1 And Glàser.RechtsÜbernehmen = True) Or ...

Eine booleasche Variable auf True-Inhalt zu prüfen und ein booleasches
Ergebnis zu erhalten ist doppelt-gemoppelt. Wozu das?

IIf(item = 1, IIf(Artikel.DivArt = 0, txtPreisre.Enabled =
False, txtPreisre.Enabled = True), _
IIf(Artikel.DivArt = 0, txtPreisli.Enabled = False,
txtPreisli.Enabled = True))

Mit einem Switch und ggf. Panel in der UI wàre auch das übersichtlicher
gestaltbar.

grdArtikelBeschreibungRe.Refetch()
grdArtikelBeschreibungLi.Refetch()

Um zu sehen, warum da nichts angezeigt wird, müsste man sehen, welche LinQ
gebunden ist und diese hir für Testzwecke separat ausführen.


Viele Grüsse
Peter

Ähnliche fragen