Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Aktualisierung der Anzeige

Empfohlene Antworten

Veröffentlicht

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

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

;) bin gerade dabei.. Danke


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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.