matze2k2 Geschrieben 17. Oktober 2010 Teilen Geschrieben 17. Oktober 2010 Hallo Jungs, ich bin mir nicht sicher, ob ich das nun hier reinposten sollte. Es ist zumindest die einzige Ecke, wo ich mir das vorstellen kann. Nun zu meinem Problem. Folgende Eckdaten liegen vor: - 1 DataGridView - 1 Array vom Typen Users - 1 Container mit Detailinformationen zum User Mit dem Array fülle ich das DataGridView: for (int i = 0; i < this.userArray.Length; i++) { dataGridView1.Rows.Add(this.userArray[i].getNameId(), this.userArray[i].getName1(), this.userArray[i].getName2(), this.userArray[i].getMatchcode(), this.userArray[i].getLogin()); } Am Ende wird der aktuell markierte Datensatz in einer Detailansicht angezeigt: showUserDetail(this.userArray[dataGridView1.CurrentRow.Index]); Nun habe ich das Problem, das ich die Detailansicht natürlich aktualisieren muss, sobald die Zeile (row) geändert wird. Ich hatte nun gehofft das mit dem RowEnter-Event lösen zu können: private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) { if (this.user != null && this.userArray != null) { if (dataGridView1.CurrentRow != null) { this.user = this.userArray[dataGridView1.CurrentRow.Index]; showUserDetail(user); } } } Wenn ich eine andere Zeile anklicke, haut auch alles soweit hin, nur wenn ich mit den Pfeiltasten eine Zeile runter gehe, dann ist immer der vorher gegangene User in der Detailansicht. Da ich mit dem Array vom Typen Users das dataGrid fülle, müsste ja eigentlich der Index des dataGrid und der des Arrays gleich sein. Kann mir einer sagen, wie ich den korrekten Index erhalten kann oder bin ich hier evtl. auf dem völlig verkehrten Wege? Gruß Mathias Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ronaldus Geschrieben 18. Oktober 2010 Teilen Geschrieben 18. Oktober 2010 Hi, nach meiner Meinung solltest Du anstatt eines Arrays eine List<User> benutzen. Diese dann dem DGV als Datatsource zuordnen... xyzBindingSource.DataSource = myUsers (...hier die List<User>!) dgv.Datasource = xyzBindingSource; Dann kannst Du im Zeilen-Doppelclick Ereignis des DGV das selektierte User-Objekt ohne aufwendige Index-Prüfung abholen... private void dgv_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { User currentUser = null; if (xyzBindingSource.Current != null) { currentUser = xyzBindingSource.Current as User; } if (currentUser != null) { hier hast Du die Referenz.... } } Gruß Ron Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
matze2k2 Geschrieben 18. Oktober 2010 Autor Teilen Geschrieben 18. Oktober 2010 bin gerade dabei.. Danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
matze2k2 Geschrieben 23. Oktober 2010 Autor Teilen Geschrieben 23. Oktober 2010 xyzBindingSource.DataSource = myUsers (...hier die List<User>!) dgv.Datasource = xyzBindingSource; Du schriebst dies hier. Wenn ich nun der datagridview die bindingSource mit meinen Benutzern zuordne, dann zeigt er aktuell alle Informationen an, welche der User hat. Aber einige möchte ich ja gar nicht anzeigen. Gibt es eine Möglichkeit diese zu deaktivieren?! Ich meine er greift da automatisch auf die get-Methoden zurück... Gruß Mathias Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ronaldus Geschrieben 25. Oktober 2010 Teilen Geschrieben 25. Oktober 2010 Hi, Du musst definieren, was im DGV angezeigt werden soll... this.dgv.AutoGenerateColumns = false; private bool datagridViewKonfiguriert = false; /// <summary> /// Erstellt Grid-Ueberschriften und definiert Anzeigewerte /// </summary> private void BuildGridHeaderForGrid() { if (datagridViewKonfiguriert) { // Die Konfiguration wurde bereits einmal durchlaufen. // -> Keine weitere Aktion return; } DataGridViewTextBoxColumn idColumn = new DataGridViewTextBoxColumn(); idColumn.HeaderText = "ID"; idColumn.DataPropertyName = "Id"; idColumn.ReadOnly = true; this.dgv.Columns.Add(idColumn); DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColumn(); nameColumn .HeaderText = "Name des Users"; nameColumn .DataPropertyName = "Name"; this.dgv.Columns.Add(nameColumn ); ....weitere Spalten.... // Merken, dass die Liste konfiguriert wurde this.datagridViewKonfiguriert = true; } BuildGridHeaderForGrid() z.B. beim Initialisieren der Form aufrufen.... Wichtig: DataPropertyName = muss als Property definiert sein... So kannst Du nur bestimmte Werte des gebundenen Objektes im DGV anzeigen. Gruß Ron Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.