Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Summenzeile am Ende des DataGridView behalten
AaleDieter
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

Summenzeile am Ende des DataGridView behalten

beantworten | zitieren | melden

Hallo zusammen,

ich habe ein unbound DataGridView, dass ich mit unterschiedlichen Werten befülle.
Am Ende habe ich eine Summenzeile, die die Werte in den Spalten addiert.

Wenn ich nun auf den Header zum sortieren klicke, wandert die Summenzeile mal an den Anfang, mal ans Ende meiner Tabelle.

Was muß ich tun, damit die Zeile immer am Ende steht, egal wie der Rest sortiert ist??

Habe da leider nix gefunden...

Vielen Dank schon mal für die Antwort!
private Nachricht | Beiträge des Benutzers
Andreas.May
myCSharp.de - Member

Avatar #avatar-2474.gif


Dabei seit:
Beiträge: 925

beantworten | zitieren | melden

Hallo,

ich empfehle dir einen Footer Bereich zu zeichnen und dort dein Ergebniss einzutragen.

Hierzu erstelle eine neue Klasse, leite von DataGridView ab und überschreibe das Event z.B. wie folgt.



        protected override void OnRowPrePaint(DataGridViewRowPrePaintEventArgs e)
        {
            if (!e.IsLastVisibleRow)
            {
                base.OnRowPrePaint(e);
            }
            else
            {
                Rectangle rowBounds = new Rectangle(
                    this.RowHeadersWidth, e.RowBounds.Top,
                    this.Columns.GetColumnsWidth(
                    DataGridViewElementStates.Visible) -
                    this.HorizontalScrollingOffset + 1,
                    e.RowBounds.Height);

                // Paint the custom selection background.
                using (Brush backbrush = new System.Drawing.Drawing2D.LinearGradientBrush(rowBounds,
                        this.DefaultCellStyle.SelectionBackColor,
                        e.InheritedRowStyle.ForeColor,
                        System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal))
                {
                    e.Graphics.FillRectangle(backbrush, rowBounds);
                    e.Graphics.DrawString("Das Ergebniss", this.Font, new SolidBrush(Color.Red), rowBounds.Location);
                }

                e.Handled = true;
            }
        }

Natürlich fehlen noch ein ein paar feinheiten aber dieser Weg wäre der einfachste. Um das Ergebniss zu ermitteln wirst du natürlich noch mit ForEach durch alle Rows durchgehen müssen.

Du kannst natürlich auch das RowPrePaint abonnomieren.

MSDN
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Andreas.May am .
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo AaleDieter,

ansonsten kannst du dem DGV sicher irgendwo auch einen IComparer mitgeben, der so implementiert ist, dass die Summenzeile immer als größtes Element angesehen wird.

herbivore
private Nachricht | Beiträge des Benutzers