在DataGridView中,即使您将网格设置为只读,行标题上也会出现一个黑色三角形,显示在当前行。
我想避免显示它,我也想避免由三角形引起的那些单元格的大填充。我猜填充是由三角形引起的,因为单元格的填充为0。
这样做是否可行?怎么样?
谢谢!
修改
这是创建行标题文本的方式:
for (int i = 0; i < 5; i++)
{
DataGridViewRow row = new DataGridViewRow();
row.HeaderCell.Value = headers[i];
dataGridView1.Rows.Add(row);
}
和headers
是一个简单的字符串数组。 (string[]
)
答案 0 :(得分:18)
如果你想保留行标题而不是隐藏行标题,那么你可以使用单元格填充将三角形推到视线之外:
this.dataGridView1.RowHeadersDefaultCellStyle.Padding =
new Padding(this.dataGridView1.RowHeadersWidth);
如果你正在使用行标题文本并希望保持可见,你需要使用一些自定义绘画 - 谢天谢地非常简单。在上面的代码之后,只需附加到RowPostPaint事件,如下所示:
dataGridView1.RowPostPaint +=
new DataGridViewRowPostPaintEventHandler(dataGridView1_RowPostPaint);
在RowPostPaint方法中:
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));
}
正如Dan Neely指出的,使用上面的Brushes.Black
会覆盖任何现有的更改,因此刷子最好使用:
new SolidBrush(dataGridView1.RowHeadersDefaultCellStyle.ForeColor)
答案 1 :(得分:5)
将RowHeadersVisible
设为false
。
答案 2 :(得分:2)
如果有人还想知道:
dataGridView1.RowHeadersWidth = 4; // the left row header size.
这将取消三角形并缩小默认大小。
希望有所帮助。
答案 3 :(得分:2)
一个非常简单的解决方案是将行高设置为16像素或更小。 这会禁用行标题单元格中的所有图标。
dataGridView1.RowTemplate.Height = 16;
答案 4 :(得分:1)
DataGridViewRowPostPaintEventArgs包含这个特殊的PaintHeader方法:
PaintHeader(DataGridViewPaintParts) - Paints the specified parts of the row header of the current row.
这是DataGridViewPaintParts枚举: https://msdn.microsoft.com/en-us/library/ms159092%28v=vs.110%29.aspx
所以你所做的就是你的datagridview的RowPostPaint事件,首先告诉它只绘制行标题的背景......就像这样:
e.PaintHeader(DataGridViewPaintParts.Background)
然后告诉它绘制你想要的任何字符串。这是我的例子:
Private Sub MyDGV_RowPostPaint(sender As Object, e As DataGridViewRowPostPaintEventArgs) Handles dgvData.RowPostPaint
Dim grid As DataGridView = DirectCast(sender, DataGridView)
e.PaintHeader(DataGridViewPaintParts.Background)
Dim rowIdx As String = (e.RowIndex + 1).ToString()
Dim rowFont As New System.Drawing.Font("Segoe UI", 9.0!, _
System.Drawing.FontStyle.Bold, _
System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Dim centerFormat = New StringFormat()
centerFormat.Alignment = StringAlignment.Far
centerFormat.LineAlignment = StringAlignment.Near
Dim headerBounds As Rectangle = New Rectangle(e.RowBounds.Left, e.RowBounds.Top, grid.RowHeadersWidth, e.RowBounds.Height)
e.Graphics.DrawString(rowIdx, rowFont, SystemBrushes.ControlText, headerBounds, centerFormat)
End Sub
答案 5 :(得分:0)
三角问题,很简单,就是
dgv_Products.Rows[xval].Selected = true;
dgv_Products.CurrentCell = dgv_Products.Rows[xval].Cells[0];
将当前单元格属性设置为当前所选行的单元格零。(已测试为dgv_Products.MultiSelect = false;)
答案 6 :(得分:0)
dataGridView1.CurrentCell = null;
完全删除黑色箭头。
每次更新DataGridView
中的数据时,您都需要运行此行。
答案 7 :(得分:0)
尝试了其他答案,但我无法将相同的字体外观与列字体匹配。 我已经在Microsoft Forums
上找到了解决方案先订阅DataGridView.CellPainting
之类的
dgv.CellPainting += Dgv_CellPainting;
然后根据需要打印文本(原始帖子具有行索引);
private void Dgv_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex == -1 && e.RowIndex > -1)
{
object o = (sender as DataGridView).Rows[e.RowIndex].HeaderCell.Value;
e.PaintBackground(e.CellBounds, true);
using (SolidBrush br = new SolidBrush(Color.Black))
{
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
e.Graphics.DrawString(o.ToString(),
e.CellStyle.Font, br, e.CellBounds, sf);
}
e.Handled = true;
}
}
答案 8 :(得分:-1)
'Datagridview'.rowheadervisible=false
隐藏黑色箭头行选择器鲍勃
Datagridview是数据网格的名称,不带引号''所以......如果您的网格名为Example,那么
Example.rowheadervisible=false