Feedback

C# - DataGridView mit Zeilen-Nummern

Veröffentlicht von am 10/10/2008
(3 Bewertungen)
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));
		}
	}
}
Abgelegt unter DatagridView, Zeilennummer.

2 Kommentare zum Snippet

Günther Foidl schrieb am 10/10/2008:
@Jan Welker: Hallo, hab mich einloggen vergessen und so das Snippet als Gast veröffentlich. Kannst du das auf Günther Foidl änder? Danke!
Jan Welker schrieb am 10/11/2008:
Erledigt.
 

Logge dich ein, um hier zu kommentieren!