Autor Beitrag
schoenewelt
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 08.10.10 15:07 
Hallo,

ich habe eine WPF-Applikation mit ".Net 4.0". In der Applikation verwende ich ein Datagrid der für das anzeigen, Bearbeiten sowie Hinzufügen der Datensätze gedacht ist. Soweit so gut.
Ich hole die Daten mittels DataTable aus der DB. Ich schreibe auch neue Datensätz mittels des SQLCommanBuilders wieder in die DB. Alles ok. Aber jetzt möchte ich wenn ich im Edit-Mode bin (Bearbeitungsstatus) das im DataGrid mitttels der Combobox eine Auswahl an Möglichkeiten angeboten wird.

Der Wert im TextBlock ist ein int-Wert.

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
<DataGridTemplateColumn Header="Typ">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding TYPE}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <ComboBox Loaded="cbxType_Loaded"  Name="cbxType" SelectionChanged="cbxType_SelectionChanged" Text="{Binding TYPE}" SelectedIndex="{Binding TYPE}" DisplayMemberPath="{Binding TYPE}" ItemsSource="{Binding}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                </DataGridTemplateColumn>


Wobei Type eine spalte der Tabelle ist.

Hierbei verwende ich für die Itemsource der Combobox eine andere Liste das die eigentlichen Einträge beinhaltet.
Das Loaded-Event sieht so aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
DataTable tableCbx = sql.SQL_DT("SELECT * FROM TABELLE");
            ComboBox c = (ComboBox)sender;
            c.ItemsSource = tableCbx.DefaultView;
            //c.DisplayMemberPath = "TYPE";
            c.DisplayMemberPath = "ID";
            c.SelectedValue = "ID";



Die Daten aus der Tabelle sind mit einem Fremdschlüssel mit der eigentlichen Tabelle Verknüpft das im DataGrid angezeigt werden soll. Ich komme aber nicht drauf wie ich die Daten in der Combobox anzeigen soll.
Es soll der Name angezeigt werden aber im Hintergrund soll natürlich die Id dieses Datensatzes verarbeitet werden wenn ein Datensatz in der Combobox ausgewählt ist.

Das Problem ist, wenn ich ein Datensatz aus der Combobox auswähle ist die Zelle Rot markiert. Ich glaube weil die Zelle ein int-Wert erwartet und einen String bekommt?! Kann das sein?


Tut mir leid wenn sich das komisch anhört bin aber schon komplett verwirrt..

Ich bitte um HILFEEEEEE..
Danke im voraus.
Schoenewelt

Moderiert von user profile iconKha: XML-Tags hinzugefügt
Moderiert von user profile iconKha: C#-Tags hinzugefügt
Moderiert von user profile iconKha: Topic aus WinForms verschoben am Fr 08.10.2010 um 15:22


Zuletzt bearbeitet von schoenewelt am Fr 08.10.10 16:08, insgesamt 1-mal bearbeitet
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 08.10.10 15:22 
:welcome:

Keinen O/RM zu benutzen, ist bei WPF eine schlechte Idee, da Data Binding ja über Objekt-Hierarchien läuft. Wenn du für die ComboBox Data Binding einsetzen willst, bräuchtest du auf jeden Fall eine Entity wie (wenn ich dich richtig verstanden habe)
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
class TypeEntity
{
  public int ID { get; set; }
  public string Name { get; set; }
}

Entweder benutzt du also einen O/RM, der dir solche Klassen automatisch erstellt und befüllt, oder du musst deine DataTables manuell auf dieses Modell mappen.

_________________
>λ=

Für diesen Beitrag haben gedankt: schoenewelt
schoenewelt Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 08.10.10 15:28 
Das Problem ist das sich die Tabellenstruktur während der Lauzeit verändern kann und auch wird. Also kann ich deshalb keine Klassen erstellen. Dem Benutzer soll die Möglichkeit geboten werden aus der Appliaktion heraus neue Tabellen anzulegen sie zu befüllen und zu modifizieren.


-- Moderiert von user profile iconKha: Beiträge zusammengefasst --


Eigentlich würde es mir reichen zu wissen wie ich die Liste an die Combobox binden soll.

Bedeutet: ID ist Fremdschlüssel in der Person-Tabelle => PersonList (DataTable)

ID ist der PK in der Tabelle das auch als FK in der Person-TAbelle genutzt wird. Type ist der Name. TypeListe (DAtaTable)

Wie erstelle ich die Bindung im DataGRid wenn das DataGrid im Edit-Modus ist, und ich die Combobox aufklappe.
Es soll der Name des Type TAbelle angezeigt werden aber bei einer Auswahl soll natürlich die ID in die DB geschrieben werden.


Danke im voraus.

Schoenwelt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 08.10.10 16:11 
Bei einer dynamischen Tabelle kannst du zwar keinen O/RM einsetzen, aber die Klasse funktioniert immer noch. Aus den Rows in TypeListe erstellst du z.B. jeweils ein KeyValuePair<intstring> und nimmst das als ItemsSource. Dann brauchst du im XAML nur noch
ausblenden XML-Daten
1:
SelectedValue="{Binding DerFK}" SelectedValuePath="{Binding Key}" DisplayMemberPath="{Binding Value}">					

_________________
>λ=
schoenewelt Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 08.10.10 16:43 
könntest du mir ein Beispiel für die Klassen geben, wie sollen in dem Fall diese Klassen aussehen?

danke im voraus
Schoenewelt