Hallo,
ich verwende ein einfaches WinForm zum Darstellen von Daten (DataGridView) aus einer BindingList<MeineKlasse>. Eine Spalte soll ausgeblendet werden und die Reihenfolge soll anders sein als in der Definition von MeineKlasse. Das Formular soll modal aufgerufen werden.
Der Konstruktor sieht (inklusive extensivem Debugginggeschnösel) so aus!:
und der Aufruf dann so:
Was läuft schief? Am Ende werden die Spalten nicht in der Reihenfolge angezeigt, die ich im Konstruktor vorgebe.
Was ich beim Debuggen sehe ist, dass am Ende des Konstruktors die Werte von DisplayIndex genau so sind wie ich sie vorgebe. Sobald aber ShowDialog() aufgerufen wird, werden alle Spalten sukzessive entfernt (solange Spalten vorhanden sind, wird Spalte mit Index 0 gelöscht). Dann werden alle Spalten wieder eingefügt, allerdings nicht in der Reihenfolge (DisplayIndex) wie gewünscht. Der Abschluss macht dann das Event BindingContextChanged. Die Entitäten stammen nicht aus einer DB sondern werden aus einem File (csv) eingelesen, dann Zeilenweise in jeweils eine Entität übertragen und diese der BindingList hinzugefügt.
Was veranlasst das Löschen der Spalten und warum passiert das? Was macht ShowDialog() da? Das macht doch keinen Sinn, oder?
Gruß
MQ
PS: Unten die kleinen Helferlies und der Debugging Output (Vorsicht laaaang)
Spoiler anzeigen
Der Output (stark gekürzt!!): Nachdem der Konstruktor beendet ist gehts folgendermaßen weiter:
Spalte 00 löschen, DisplayIndizes neu ordnen, dann nächste Spalte, ...
Dann Spalten wieder in der gleichen Reihenfolge (Index) einfügen und DisplayIndizes neu ordnet, nicht allerdings wie ursprünglich
ich verwende ein einfaches WinForm zum Darstellen von Daten (DataGridView) aus einer BindingList<MeineKlasse>. Eine Spalte soll ausgeblendet werden und die Reihenfolge soll anders sein als in der Definition von MeineKlasse. Das Formular soll modal aufgerufen werden.
Der Konstruktor sieht (inklusive extensivem Debugginggeschnösel) so aus!:
C#-Quellcode
- public FrmTabelle(BindingList<KreditkarteEntity> source) {
- InitializeComponent();
- dataGridView.AutoGenerateColumns = true;
- dataGridView.DataSource = source;
- Debug.Print("Start");
- checkHeader();
- check();
- dataGridView.BindingContextChanged += _BindingContextChanged;
- dataGridView.ColumnDisplayIndexChanged += DisplayIndexChanged;
- dataGridView.ColumnRemoved += ColumnRemoved;
- dataGridView.ColumnAdded += ColumnAdded;
- Debug.Print("Events scharf");
- dataGridView.Columns["KEintragID"].Visible = false;
- //dataGridView.Columns["Konto"].Visible = false;
- //dataGridView.Columns["Belegdatum"].Visible = false;
- dataGridView.Columns["KEintragID"].DisplayIndex = 0;
- dataGridView.Columns["Buchungsdatum"].DisplayIndex = 1;
- dataGridView.Columns["Belegdatum"].DisplayIndex = 2;
- dataGridView.Columns["Buchungsbetrag"].DisplayIndex = 3;
- dataGridView.Columns["Erklärung"].DisplayIndex = 4;
- dataGridView.Columns["Beschreibung"].DisplayIndex = 5;
- dataGridView.Columns["BeschreibungZusatz"].DisplayIndex = 6;
- dataGridView.Columns["Konto"].DisplayIndex = 7;
- dataGridView.CellDoubleClick += DataGridView_CellDoubleClick;
- Debug.Print("händische Sortierung beendet");
- }
und der Aufruf dann so:
Was läuft schief? Am Ende werden die Spalten nicht in der Reihenfolge angezeigt, die ich im Konstruktor vorgebe.
Was ich beim Debuggen sehe ist, dass am Ende des Konstruktors die Werte von DisplayIndex genau so sind wie ich sie vorgebe. Sobald aber ShowDialog() aufgerufen wird, werden alle Spalten sukzessive entfernt (solange Spalten vorhanden sind, wird Spalte mit Index 0 gelöscht). Dann werden alle Spalten wieder eingefügt, allerdings nicht in der Reihenfolge (DisplayIndex) wie gewünscht. Der Abschluss macht dann das Event BindingContextChanged. Die Entitäten stammen nicht aus einer DB sondern werden aus einem File (csv) eingelesen, dann Zeilenweise in jeweils eine Entität übertragen und diese der BindingList hinzugefügt.
Was veranlasst das Löschen der Spalten und warum passiert das? Was macht ShowDialog() da? Das macht doch keinen Sinn, oder?
Gruß
MQ
PS: Unten die kleinen Helferlies und der Debugging Output (Vorsicht laaaang)
C#-Quellcode
- void check() {
- List<string>listeIndex = new List<string>();
- List<string>listeDisplay = new List<string>();
- foreach (DataGridViewColumn item in dataGridView.Columns) {
- listeIndex.Add(item.Index.ToString("00"));
- listeDisplay.Add(item.DisplayIndex.ToString("00"));
- }
- string sIndex = string.Join(" ", listeIndex.ToArray());
- string sDisplay= string.Join(" ", listeDisplay.ToArray());
- string s = sIndex + "\n" + sDisplay;
- Debug.Print(s);
- }
Der Output (stark gekürzt!!): Nachdem der Konstruktor beendet ist gehts folgendermaßen weiter:
Spalte 00 löschen, DisplayIndizes neu ordnen, dann nächste Spalte, ...
Dann Spalten wieder in der gleichen Reihenfolge (Index) einfügen und DisplayIndizes neu ordnet, nicht allerdings wie ursprünglich
Quellcode
- Start
- KEintragID(00) Konto(01) Belegdatum(02) Buchungsdatum(03) Originalwährung(04) Kurs(05) Buchungswährung(06) Beschreibung(07) Erklärung(08) BeschreibungZusatz(09) Buchungsreferenz(10) Gebührenschlüssel(11) Länderkennzeichen(12) BAR_Referenz(13) AEE_Referenz(14) Abrechungskennzeichen(15) KategorieID(16) Buchungsbetrag(17) Originalbetrag(18)
- 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
- 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
- Events scharf
- Event DisplayIndexChanged ausgelöst von Buchungsdatum(03)
- KEintragID(00) Konto(01) Belegdatum(02) Buchungsdatum(03) Originalwährung(04) Kurs(05) Buchungswährung(06) Beschreibung(07) Erklärung(08) BeschreibungZusatz(09) Buchungsreferenz(10) Gebührenschlüssel(11) Länderkennzeichen(12) BAR_Referenz(13) AEE_Referenz(14) Abrechungskennzeichen(15) KategorieID(16) Buchungsbetrag(17) Originalbetrag(18)
- 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
- 00 02 03 01 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
- ...
- Event DisplayIndexChanged ausgelöst von Konto(01)
- Event DisplayIndexChanged ausgelöst von Belegdatum(02)
- Event DisplayIndexChanged ausgelöst von Belegdatum(02)
- Event DisplayIndexChanged ausgelöst von Konto(01)
- Event DisplayIndexChanged ausgelöst von Buchungsbetrag(17)
- 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
- 00 04 02 01 05 06 07 08 09 10 11 12 13 14 15 16 17 03 18
- Event DisplayIndexChanged ausgelöst von Konto(01)
- Event DisplayIndexChanged ausgelöst von Originalwährung(04)
- Event DisplayIndexChanged ausgelöst von Kurs(05)
- Event DisplayIndexChanged ausgelöst von Buchungswährung(06)
- Event DisplayIndexChanged ausgelöst von Beschreibung(07)
- Event DisplayIndexChanged ausgelöst von Erklärung(08)
- Event DisplayIndexChanged ausgelöst von BeschreibungZusatz(09)
- Event DisplayIndexChanged ausgelöst von Buchungsreferenz(10)
- Event DisplayIndexChanged ausgelöst von Gebührenschlüssel(11)
- Event DisplayIndexChanged ausgelöst von Länderkennzeichen(12)
- Event DisplayIndexChanged ausgelöst von BAR_Referenz(13)
- Event DisplayIndexChanged ausgelöst von AEE_Referenz(14)
- Event DisplayIndexChanged ausgelöst von Abrechungskennzeichen(15)
- Event DisplayIndexChanged ausgelöst von KategorieID(16)
- 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
- 00 04 02 01 05 06 07 08 09 10 11 12 13 14 15 16 17 03 18
- ...
- 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
- 00 07 02 01 08 09 10 05 04 06 11 12 13 14 15 16 17 03 18
- händische Sortierung beendet
- ...
- 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17
- 06 01 00 07 08 09 04 03 05 10 11 12 13 14 15 16 02 17
- KEintragID gelöscht, Index 00, Displayindex 00
- Konto gelöscht, Index 00, Displayindex 06
- Belegdatum gelöscht, Index 00, Displayindex 01
- Buchungsdatum gelöscht, Index 00, Displayindex 00
- Originalwährung gelöscht, Index 00, Displayindex 04
- Kurs gelöscht, Index 00, Displayindex 04
- Buchungswährung gelöscht, Index 00, Displayindex 04
- Beschreibung gelöscht, Index 00, Displayindex 02
- Erklärung gelöscht, Index 00, Displayindex 01
- BeschreibungZusatz gelöscht, Index 00, Displayindex 01
- Buchungsreferenz gelöscht, Index 00, Displayindex 01
- Gebührenschlüssel gelöscht, Index 00, Displayindex 01
- Länderkennzeichen gelöscht, Index 00, Displayindex 01
- BAR_Referenz gelöscht, Index 00, Displayindex 01
- AEE_Referenz gelöscht, Index 00, Displayindex 01
- Abrechungskennzeichen gelöscht, Index 00, Displayindex 01
- KategorieID gelöscht, Index 00, Displayindex 01
- Buchungsbetrag gelöscht, Index 00, Displayindex 00
- Originalbetrag gelöscht, Index 00, Displayindex 00
- KEintragID hinzugefügt, Index 00, Displayindex 00
- Konto hinzugefügt, Index 01, Displayindex 01
- Belegdatum hinzugefügt, Index 02, Displayindex 02
- Buchungsdatum hinzugefügt, Index 03, Displayindex 01
- Originalwährung hinzugefügt, Index 04, Displayindex 04
- Kurs hinzugefügt, Index 05, Displayindex 05
- Beschreibung hinzugefügt, Index 07, Displayindex 05
- Erklärung hinzugefügt, Index 08, Displayindex 04
- BeschreibungZusatz hinzugefügt, Index 09, Displayindex 06
- Buchungsreferenz hinzugefügt, Index 10, Displayindex 10
- Gebührenschlüssel hinzugefügt, Index 11, Displayindex 11
- Länderkennzeichen hinzugefügt, Index 12, Displayindex 12
- BAR_Referenz hinzugefügt, Index 13, Displayindex 13
- AEE_Referenz hinzugefügt, Index 14, Displayindex 14
- Abrechungskennzeichen hinzugefügt, Index 15, Displayindex 15
- KategorieID hinzugefügt, Index 16, Displayindex 16
- Buchungsbetrag hinzugefügt, Index 17, Displayindex 03
- Originalbetrag hinzugefügt, Index 18, Displayindex 18
- BindingContextChanged ausgelöst