Entwickler-Ecke

WPF / Silverlight - DataGrid bearbeiten


tomo2403 - Mi 23.05.18 16:57
Titel: DataGrid bearbeiten
Hey Leute, :wink2:

ich habe in meiner Wpf Anwendung ein DataGrid erstellt und Daten hinzugefügt.
Wenn ich allerdings diese in der Anwendung änder möchte, kommt der Fehler "EditItem ist in dieser Ansicht nicht möglich".

Kann mir jemad sagen was ich da tun soll?

Danke im Voraus! :D

Moderiert von user profile iconTh69: Titel geändert (war "DataGird bearbeiten").


Th69 - Mi 23.05.18 17:47

Was für Daten (d.h. welchen Datentyp) hast du denn hinzugefügt, und wie?


tomo2403 - Mi 23.05.18 18:29

Ich benutze int und strings

Unten ist ein Bild davon.


Th69 - Mi 23.05.18 18:58

Zeige mal etwas Code, d.h. verwendest du MVVM (ObservableCollection) oder hast du die Daten händisch hinzugefügt?


tomo2403 - Do 24.05.18 14:53

Also, das DataGrid an sich ist leer bis auf die Columns.

Mit einem Button kann man dann belibig viele Items hinzufügen. ID und Punkte werden automatisch erstellt. Denn Spieler Namen kann man selbst eintragen.

Das ist das Button Event:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
playername = Convert.ToString(PlayerNameEingabe.Text);

Player player1 = new Player
{
    PlayerName = playername,
    PlayerID = playerid,
    PlayerScore = 0,
};
DataGird.Items.Add(player1);
playerid += 1;


Das sind die Eigenschaften von den Columns:

C#-Quelltext
1:
2:
3:
<DataGridTextColumn Binding="{Binding PlayerID}" ClipboardContentBinding="{x:Null}" Header="ID" HeaderStringFormat="PlayerID"/>
<DataGridTextColumn Binding="{Binding PlayerName}" ClipboardContentBinding="{x:Null}" Header="Spieler Name"/>
<DataGridTextColumn Binding="{Binding PlayerScore}" ClipboardContentBinding="{x:Null}" Header="Punkte"/>


Th69 - Do 24.05.18 16:29

Die Fehlermeldung kommt, weil du direkt Items hinzufügst, anstatt die Eigenschaft ItemsSource zu benutzen (und zwar mit einer Klasse welche IList unterstützt, also z.B. List oder ObservableCollection):

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
// als Member
private ObservableCollection<Player> players = new ObservableCollection<Player>();

// im Konstruktor
DataGrid.ItemsSource = players;

// im Button Click
Player player = new Player { /*...*/ };
players.Add(player);


PS: Es heißt DataGrid, nicht DateGird. ;-)

PPS: Und wenn du WPF wie WinForms programmierst (d.h. ohne MVVM), dann wird es sehr umständlich und führt zu Fehlern wie diesem.


tomo2403 - Do 24.05.18 16:40

Danke jetzt Funktioniert es! :zustimm:


tomo2403 - Sa 09.06.18 12:52

Habe doch nochmal eine Frage:

ich habe jetzt zwar alles genauso gemacht wie geschrieben aber, immer wenn ich die Anwendung starte,
werden einfach die strings und int, in denen die Werte gespeichert sind, nochmal als einzeln in Columns dargestellt. Wie bekomme ich die wieder weg?


Th69 - Sa 09.06.18 16:06

Hast du evtl. AutoGenerateColumns [https://msdn.microsoft.com/de-de/library/system.windows.controls.datagrid.autogeneratecolumns(v=vs.110).aspx] (noch) aktiviert?


tomo2403 - So 10.06.18 12:34

Ja, hatte ich.

Danke!

:D :zustimm: