在 Winforms DataGridView 中,我如何:
- 删除行标题上的箭头?我需要显示行标题文本,所以我不能简单地设置
RowHeadersVisible = false
. - 以编程方式调整行标题的宽度?我正在通过代码设置行标题,因此我需要调整宽度以在更改时显示行标题文本。
在 Winforms DataGridView 中,我如何:
RowHeadersVisible = false
.首先覆盖 DataGridView 的函数
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
e.PaintHeader(DataGridViewPaintParts.All & ~DataGridViewPaintParts.ContentBackground);
}
在按钮上单击将值添加到行标题
private void button1_Click(object sender, EventArgs e)
{
string a = "khan yousafzai";
dataGridView1.RowHeadersWidth = dataGridView1.RowHeadersWidth +(7* a.Length);
dataGridView1.Rows[0].HeaderCell.Value = a;
dataGridView2.Rows.Add();
}
您是否仍需要允许排序但不显示箭头?如果没有,只需将每列设置SortMode
为NotSortable
. 如果需要排序但不显示箭头,请将列设置SortMode
为Programmatic
,并手动对列Click
或MouseDown
事件中的数据源进行排序。
将列标题设置为所需的任何文本后,使用表单Graphics
类获取文本的宽度,然后相应地设置列宽:
Graphics g = this.CreateGraphics();
int w = (int)g.MeasureString(dataGridView1.Columns[0].HeaderText, dataGridView1.Font).Width;
this.dataGridView1.Columns[0].Width = w;
首先,如何在C#.Net 2.0及以上版本的DataGridView中添加数字行RowHeadersWidth:
// On Form_Load add the numeration to DataGridView Row Header
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();
}
现在,您可以根据其大小动态调整行标题的大小,就像在 Microsoft Excel 中一样。
// Dinamically adjust row header size to max current width available (like Microsoft Excel does)
private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
int firstDisplayedCellIndex = dataGridView1.FirstDisplayedCell.RowIndex;
int lastDisplayedCellIndex = firstDisplayedCellIndex + dataGridView1.DisplayedRowCount(true);
Graphics Graphics = dataGridView1.CreateGraphics();
int measureFirstDisplayed = (int)(Graphics.MeasureString(firstDisplayedCellIndex.ToString(), dataGridView1.Font).Width);
int measureLastDisplayed = (int)(Graphics.MeasureString(lastDisplayedCellIndex.ToString(), dataGridView1.Font).Width);
int rowHeaderWitdh = System.Math.Max(measureFirstDisplayed, measureLastDisplayed);
dataGridView1.RowHeadersWidth = rowHeaderWitdh + 35;
}
此解决方案仅适用于 .Net Framework 2.0 及更高版本,不适用于 CF。