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!
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.
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
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