// // Copyright (c) PlaceholderCompany. All rights reserved. // namespace SystemTrayMenu.Utilities { using System.Data; using System.Drawing; using System.Linq; using System.Windows.Forms; internal static class DataGridViewExtensions { /// /// dgv.AutoResizeColumns() was too slow ~45ms. /// /// datagridview. internal static void FastAutoSizeColumns(this DataGridView dgv) { System.Collections.Generic.IEnumerable rows = dgv.Rows.Cast(); using Graphics gfx = dgv.CreateGraphics(); int i = 1; gfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; float widthMax = dgv.Columns[i].HeaderCell.Size.Width; foreach (DataGridViewRow row in rows) { float checkWidth = gfx.MeasureString( row.Cells[i].Value.ToString() + "___", dgv.RowTemplate.DefaultCellStyle.Font) .Width; if (checkWidth > widthMax) { widthMax = checkWidth; } } if (widthMax > Properties.Settings.Default.MaximumMenuWidth) { widthMax = Properties.Settings.Default.MaximumMenuWidth; } dgv.Columns[i].Width = (int)(widthMax + 0.5); string stringWithWidthLikeIcon = "____"; float width0 = gfx.MeasureString( stringWithWidthLikeIcon, dgv.RowTemplate.DefaultCellStyle.Font).Width; double factorIconSizeInPercent = Properties.Settings.Default.IconSizeInPercent / 100f; dgv.Columns[0].Width = (int)(width0 * factorIconSizeInPercent); } } }