Zum Inhalt springen

Aktualisierung der Anzeige


matze2k2

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen


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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...