In the DataGridView, even if you set the grid as readonly there is a black triangle at the rows headers which is shown at the current row.
I'd like to avoid it to be shown, also I'd like to avoid the big padding of those cells caused by the triangle. I guess the padding is caused by the triangle because the cell's padding is 0.
Is it posible to do that? How?
Thanks!
Edit
This is how row headers text is created:
for (int i = 0; i < 5; i++)
{
DataGridViewRow row = new DataGridViewRow();
row.HeaderCell.Value = headers[i];
dataGridView1.Rows.Add(row);
}
and headers
its a simply array of strings. (string[]
)
If you want to keep the row headers rather than hide them, then you can use the cell padding to push the triangle out of sight:
this.dataGridView1.RowHeadersDefaultCellStyle.Padding =
new Padding(this.dataGridView1.RowHeadersWidth);
If you are using row header text and want keep that visible you need to use some custom painting - thankfully very simple. After the above code, simply attach to the RowPostPaint event as shown below:
dataGridView1.RowPostPaint +=
new DataGridViewRowPostPaintEventHandler(dataGridView1_RowPostPaint);
And in the RowPostPaint method:
void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
object o = dataGridView1.Rows[e.RowIndex].HeaderCell.Value;
e.Graphics.DrawString(
o != null ? o.ToString() : "",
dataGridView1.Font,
Brushes.Black,
new PointF((float)e.RowBounds.Left + 2, (float)e.RowBounds.Top + 4));
}
As Dan Neely points out the use of Brushes.Black
above will overwrite any existing changes, so it is better for the brush to use:
new SolidBrush(dataGridView1.RowHeadersDefaultCellStyle.ForeColor)
Set RowHeadersVisible
to false
.
A very simple solution is to set the row height to 16 pixels or less. This disables all icons in the row header cell.
dataGridView1.RowTemplate.Height = 16;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With