Standardmäßig bietet das DataGridView keine Möglichkeit Zeilen-Nummern automatisch anzuzeigen.
Nachfolgend ein erweitertes DataGridView das die Anzeige von Zeilen-Nummern erlaubt. Diese werden im Zeilen-Header dargestellt.
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
namespace gfoidl.Tools.Controls
{
/// <summary>
/// DataGridView mit ZeilenNr
/// </summary>
public class gfDataGridView : DataGridView
{
[Category("Darstellung")]
[DefaultValue(true)]
[Description("Gibt an ob Zeilen-Nummern dargestellt werden sollen")]
public bool ZeilenNummern { get; set; }
//---------------------------------------------------------------------
public gfDataGridView()
{
// Setzen des Standardwerts für die automatische Eigenschaft.
this.ZeilenNummern = true;
}
//---------------------------------------------------------------------
/// <summary>
/// Zeichnet die ZeilenNr in den ZeilenHeader.
/// <para>
/// Die Spaltenbreite wird automatisch angepasst
/// </para>
/// </summary>
/// <param name="e"></param>
protected override void OnRowPostPaint(DataGridViewRowPostPaintEventArgs e)
{
base.OnRowPostPaint(e);
// Darstellung von Zeilennummern?
if (!this.ZeilenNummern) return;
// ZeilenNr - zur besseren Optik links mit Leerzeichen auffüllen:
string rowNumber =
(e.RowIndex + 1).ToString()
.PadLeft(this.RowCount.ToString().Length);
// Schriftgröße:
SizeF size = e.Graphics.MeasureString(rowNumber, this.Font);
// Breite des ZeilenHeaders anpassen:
if (this.RowHeadersWidth < (int)(size.Width + 20))
this.RowHeadersWidth = (int)(size.Width + 20);
// ZeilenNr zeichnen:
e.Graphics.DrawString(
rowNumber,
this.Font,
SystemBrushes.ControlText,
e.RowBounds.Location.X + 15,
e.RowBounds.Location.Y + ((e.RowBounds.Height - size.Height) / 2));
}
}
}
2 Kommentare zum Snippet