Hi @rishabh aggarwal , Welcome to Microsoft Q&A, Updated:
You can use the Graphics.MeasureString method to calculate the width of the text and adjust the font size accordingly. You can perform a null reference check before accessing ConvertEventArgs.Value to ensure it is not null.
using System.Drawing;
using System.Windows.Forms;
namespace _7_15_x
{
public partial class Form1 : Form
{
private const int MaxCharacters = 15;
private DataGridView dataGridView;
public Form1()
{
InitializeComponent();
InitializeDataGridView();
}
private void InitializeDataGridView()
{
dataGridView = new DataGridView();
dataGridView.Dock = DockStyle.Fill;
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
// add column
DataGridViewTextBoxColumn textColumn = new DataGridViewTextBoxColumn();
textColumn.Name = "TextColumn";
textColumn.HeaderText = "Text Column";
dataGridView.Columns.Add(textColumn);
// add row
dataGridView.Rows.Add("This is a long text that will be squeezed.");
// add event handler
dataGridView.CellFormatting += DataGridView_CellFormatting;
Controls.Add(dataGridView);
}
private void DataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == dataGridView.Columns["TextColumn"].Index && e.RowIndex >= 0)
{
// ensure that the value is not null
if (e.Value != null)
{
string cellValue = e.Value.ToString();
if (cellValue.Length > MaxCharacters)
{
using (Graphics g = dataGridView.CreateGraphics())
{
SizeF textSize = g.MeasureString(cellValue, dataGridView.Font);
float adjustedFontSize = dataGridView.Font.Size * (dataGridView.Columns["TextColumn"].Width / textSize.Width);
Font adjustedFont = new Font(dataGridView.Font.FontFamily, adjustedFontSize, dataGridView.Font.Style);
// set the font
e.CellStyle.Font = adjustedFont;
// set the value
e.Value = cellValue;
}
}
}
}
}
}
}
If you are not sure about the length of your data, you may choose to use the WarpMode property.
DataGridViewCellStyle.WrapMode Property Please refer to the documentation above.
dataGridView1.ColumnHeadersVisible = false;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
dataGridView1.ReadOnly = true;
dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;
dataGridView1.Columns[0].Visible = false;
dataGridView1.Columns[3].Visible = false;
dataGridView1.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dataGridView1.ScrollBars = ScrollBars.None;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.MultiSelect = false;
dataGridView1.AllowUserToResizeColumns = false;
dataGridView1.RowHeadersVisible = false;
dataGridView1.AllowUserToResizeRows = false;
dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dataGridView1.Columns[1].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
Best Regards,
Jiale
If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.