| 

.NET C# Java Javascript Exception

1
Guten Morgen, ich habe vor mehrere Grids aufzubauen in denen DropDwons eingebaut sind. Mein Lösungsansatz scheint mir nicht recht gelungen zu sein, aber er funktioniert. Die Daten werden per SP und LINQ aus der DB geholt.
Meine Frage: Wie kann ich diesen Code vereinfachen bzw. verkürzen.
Primär geht es mir um die Datenbindung bzw. um das Editieren und Speichern der Daten.
Gespeichert wird, wenn die aktuelle Zeile im Grid verlassen wird.

SQL:
Daten für das Grid:
SELECT OberflächenID, refHerstellerID, OberflächenBezeichnung, OberflächenKurzBez FROM PlattenOberfläche
Daten für das DropDown:
SELECT HerstellerID, HerstellerName, HerstellerKurzBez
FROM PlattenHersteller
Verknüpfung:
PlattenOberfläche.refHerstellerID zu PlattenHersteller.HerstellerID



CODE:
using System.Linq; using System.Windows; using System.Windows.Controls;

namespace Test {

public partial class Window1 :Window {

BusinessLogic.MyLINQ.Materialverwaltung.MaterialverwaltungDC MaterialverwaltungDC = new BusinessLogic.MyLINQ.Materialverwaltung.MaterialverwaltungDC();

public Window1() {
InitializeComponent();
this.BindGridOberfläche();
}

private void BindGridOberfläche() {
//-- Grid Füllen
gridOberfläche.ItemsSource = MaterialverwaltungDC.PlattenOberfläche_GET();
//-- dazugehörige DropDown füllen
this.ddHersteller.ItemsSource = MaterialverwaltungDC.PlattenHersteller_GET();
}

private void gridOberfläche_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e) {
if(e.EditAction == DataGridEditAction.Commit) {
BusinessLogic.MyLINQ.Materialverwaltung.PlattenOberfläche_GETResult res = e.Row.Item as BusinessLogic.MyLINQ.Materialverwaltung.PlattenOberfläche_GETResult;
if(res.OberflächenID == 0) {
//-- Neuer Datensatz wurde eingefügt
MaterialverwaltungDC.PlattenOberfläche_INS(res.refHerstellerID, res.OberflächenBezeichnung, res.OberflächenKurzBez);
}
else {
//-- Datensartz wurde aktualisiert
MaterialverwaltungDC.PlattenOberfläche_UPD(res.OberflächenID, res.refHerstellerID, res.OberflächenBezeichnung, res.OberflächenKurzBez);
}
}
}
}
}

XAML:
<Window x:Class="Test.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:Test"
Title="Window1" Height="337" Width="560">

<DataGrid Name="gridOberfläche" RowEditEnding="gridOberfläche_RowEditEnding" AutoGenerateColumns="False" SelectionMode="Single">

<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=OberflächenID}" Header="ID" IsReadOnly="True"/>

<DataGridTextColumn Binding="{Binding Path=OberflächenBezeichnung, UpdateSourceTrigger=PropertyChanged}" Header="Oberfläche" IsReadOnly="False"/>

<DataGridTextColumn Binding="{Binding Path=OberflächenKurzBez, UpdateSourceTrigger=PropertyChanged}" Header="Kurzbez." IsReadOnly="False"/>

<DataGridComboBoxColumn Header="Hersteller" x:Name="ddHersteller"
TextBinding="{Binding HerstellerName}"
DisplayMemberPath="HerstellerName"
SelectedValuePath="HerstellerID"
SelectedValueBinding="{Binding refHerstellerID, UpdateSourceTrigger=LostFocus}"/>

</DataGrid.Columns>
</DataGrid>
</Window>
News:
09.02.2011
MStrasser 342 1 8
2 Antworten
1
Also ich verstehe dein Problem nicht ganz, Code und XAML sehen doch recht sauber aus.

Wenn du etwas kürzen möchtest, könntest du ein
using
für
BusinessLogic.MyLINQ.Materialverwaltung
enführen, das betrifft jetzt mal genau zwei Zeilen. Dann würde ich die variable
MaterialVerwaltungDC
umbenennen, damit sie nicht den Namen der Klasse hat (musst du, wenn du meinen using-Vorschlag umsetzt).

Eine Option wäre noch, die Entscheidung auf INSERT oder UPDATE der MaterialVerwaltungDC-Klasse zu übertragen, das würde dir die Abfrage im Event-Handler sparen. Aber das scheint eine automatisch generierte Klasse zu sein.

Ich persönlich bevorzuge im BusinessModel eigene Klassen zu verwenden, und nicht die Klassen des Data Layers mit bis ins UI zu nehmen. Aber das würde den Code umfangreicher machen.
09.02.2011
Maria Simlinger 1,1k 1 9
Nur als Ergänzung, das umbennenen würde wie folgt funktionieren:
using MaterialVerwaltungDC = BusinessLogic.MyLINQ.Materialverwaltung;
Konstantin 09.02.2011
Wieso? MaterialVerwaltungDC ist ja der Name der Klasse unter dem NS BusinessLogic.MyLINQ.Materialverwaltung?
Maria Simlinger 09.02.2011
Uh mein Fehler, du hast natürlich Recht! Ich hab deine Aussage missverstanden.
Konstantin 09.02.2011
0
Naja, Problem war es ja eigentlich eh nicht. Nur war ich mir nicht sicher, ob ich das mit der DataGridComboBoxColumn richtig gelösct habe, im besonderen mit dem UpdateSourceTrigger=LostFocus.
Mein Gefühl sagte mir, dass das Bindig besser sein könnte.
Aber nun bin ich beruhigt.
Danke
10.02.2011
MStrasser 342 1 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH