C#DataGridView可视化设置

时间:2015-11-18 09:10:09

标签: c# winforms datagridview

我正在寻找一种方法来对C#中显示的DataGridview进行一些更改:Current Datagridview

它由两列组成,在本例中为6行。

它应该是一个清单,你正在阅读:“电池......开”等等。 为了获得左列和右列之间的点,我只是在每个字符串之后和之前添加许多点。

电池组的字符串如下:

"BATTERY...............................".  

右栏中的“ON”字符串如下所示:

"..............ON"

正如你所看到的,点之间仍然存在差距,我该如何摆脱这个? CellBorderStyle设置为:

checklist_dataGridView.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal;

此外,左列和右列之间存在轻微的高度差异,这是

的结果
checklist_dataGridView.Columns[1].DefaultCellStyle.WrapMode = DataGridViewTriState.True;

这应该是使右列文本从右向左移动。

如果没有这个,右栏只显示“...........................”

有没有更好的方法来正确对齐所有内容?

感谢您的帮助

Axel R

编辑: 我通过制作一个列并简单地计算字符串的宽度来解决问题。如果字符串未达到列的宽度,则会在字符串中添加一个点。这对我很有用。

2 个答案:

答案 0 :(得分:0)

您可以使用网格线的自定义单元格绘制来接近所需的布局。您可以自定义将底部网格线绘制为绿色虚线,并跳过将点添加到单元格值。唯一的区别是线条会横向穿过整个网格。

首先确保左列左下对齐,右列右下对齐:

checklist_dataGridView.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomLeft;
checklist_dataGridView.Columns[0].DefaultCellStyle.ForeColor = System.Drawing.Color.LightGreen;

checklist_dataGridView.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
checklist_dataGridView.Columns[1].DefaultCellStyle.ForeColor = System.Drawing.Color.LightGreen;

要自定义绘制底部带有绿色虚线的单元格,可以实现DataGridView CellPainting处理程序:

private void checklist_dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    if (e.RowIndex > -1 )
    {
        e.Handled = true;
        e.Graphics.FillRectangle(System.Drawing.Brushes.Black, e.CellBounds);                

        using (Pen p = new Pen(Brushes.LightGreen))
        {
            p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
            e.Graphics.DrawLine(p, new Point(0, e.CellBounds.Bottom - 1), new Point(e.CellBounds.Right, e.CellBounds.Bottom - 1));
        }

        e.PaintContent(e.ClipBounds);
    }
}

答案 1 :(得分:0)

抱歉......你无法消除差距,因为checklist_dataGridView.DefaultCellStyle.Padding = new Padding(0, 0, 0, 0);没有采取负值。

现在为了使你的原始代码工作,我将添加一个空格点空间点空间点,如“...... ...”。 这样,您不会看到单元格上的点,文本将被包裹。此外,如果你在左边的单元格上以一个点结束并且在右边的单元格上以一个点开始,那么间隙将接近空间距离并且它将不太明显。

不要忘记这一点,所以你的文字包装:

checklist_dataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
checklist_dataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True;