Laden...

Summenzeile am Ende des DataGridView behalten

Erstellt von AaleDieter vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.624 Views
A
AaleDieter Themenstarter:in
4 Beiträge seit 2009
vor 14 Jahren
Summenzeile am Ende des DataGridView behalten

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!

915 Beiträge seit 2006
vor 14 Jahren

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

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

49.485 Beiträge seit 2005
vor 14 Jahren

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