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??
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.
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.