C# 如何使用空行填充datagridview灰色区域

C# 如何使用空行填充datagridview灰色区域,c#,datagridview,C#,Datagridview,我需要知道在datagridview绑定数据后,如何填充datagridview其余灰色区域中的空行。任何人对此有一个简单的方法,请在这里评论 将背景色设置为透明或与表单相同的颜色将是一件好事,但如果不想这样做,则必须为此创建自定义datagridview。您可能应该选中此项创建自定义的DataGridView,我已经在其他AutoSizeColumnsMode上对其进行了测试,测试结果有点问题,因此将其设置为DataGridViewAutoSizeColumnsMode.Fill,但无论如何:

我需要知道在datagridview绑定数据后,如何填充datagridview其余灰色区域中的空行。任何人对此有一个简单的方法,请在这里评论


将背景色设置为透明或与表单相同的颜色将是一件好事,但如果不想这样做,则必须为此创建自定义datagridview。您可能应该选中此项

创建自定义的
DataGridView
,我已经在其他
AutoSizeColumnsMode
上对其进行了测试,测试结果有点问题,因此将其设置为
DataGridViewAutoSizeColumnsMode.Fill,但无论如何:

public class GridLineDataGridView : DataGridView
{
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        int rowHeight = this.RowTemplate.Height;

        int h = this.ColumnHeadersHeight + rowHeight * this.RowCount;
        int imgWidth = this.Width - 2;
        Rectangle rFrame = new Rectangle(0, 0, imgWidth, rowHeight);
        Rectangle rFill = new Rectangle(1, 1, imgWidth - 2, rowHeight);
        Rectangle rowHeader = new Rectangle(2, 2, this.RowHeadersWidth - 3, rowHeight);

        Pen pen = new Pen(this.GridColor, 1);

        Bitmap rowImg = new Bitmap(imgWidth, rowHeight);
        Graphics g = Graphics.FromImage(rowImg);
        g.DrawRectangle(pen, rFrame);
        g.FillRectangle(new SolidBrush(this.DefaultCellStyle.BackColor), rFill);
        g.FillRectangle(new SolidBrush(this.RowHeadersDefaultCellStyle.BackColor), rowHeader);

        Bitmap rowImgAAlternative = rowImg.Clone() as Bitmap;
        Graphics g2 = Graphics.FromImage(rowImgAAlternative);
        rFill.X += this.RowHeadersWidth - 1;
        g2.FillRectangle(new SolidBrush(this.AlternatingRowsDefaultCellStyle.BackColor), rFill);

        int w = this.RowHeadersWidth - 1;
        for (int j = 0; j < this.ColumnCount; j++)
        {
            g.DrawLine(pen, new Point(w, 0), new Point(w, rowHeight));
            g2.DrawLine(pen, new Point(w, 0), new Point(w, rowHeight));
            w += this.Columns[j].Width;
        }

        int loop = (this.Height - h) / rowHeight;
        for (int j = 0; j < loop + 1; j++)
        {
            int index = this.RowCount + j;
            if (index % 2 == 0)
            {
                e.Graphics.DrawImage(rowImg, 1, h + j * rowHeight);
            }
            else
            {
                e.Graphics.DrawImage(rowImgAAlternative, 1, h + j * rowHeight);
            }
        }
    }
}
公共类GridLineDataGridView:DataGridView { 受保护的覆盖无效OnPaint(PaintEventArgs e) { 基础漆(e); int rowHeight=this.RowTemplate.Height; int h=this.columnHeadershight+行高*this.RowCount; int imgWidth=这个.Width-2; 矩形rFrame=新矩形(0,0,imgWidth,行高); 矩形rFill=新矩形(1,1,imgWidth-2,行高); 矩形rowHeader=新矩形(2,2,this.RowHeadersWidth-3,rowHeight); 钢笔=新钢笔(this.GridColor,1); 位图行img=新位图(imgWidth,行高); Graphics g=Graphics.FromImage(rowImg); g、 绘图矩形(笔、框架); g、 FillRectangle(新的SolidBrush(this.DefaultCellStyle.BackColor),rFill); g、 FillRectangle(新的SolidBrush(this.RowHeadersDefaultCellStyle.BackColor),rowHeader); 位图rowImgAAlternative=rowImg.Clone()作为位图; Graphics g2=Graphics.FromImage(rowImgAAlternative); rFill.X+=this.RowHeadersWidth-1; g2.FillRectangle(新的SolidBrush(this.AlternatingRowsDefaultCellStyle.BackColor)),rFill; int w=this.RowHeadersWidth-1; for(int j=0;j

更改您的
私有DataGridView DataGridView
私有GridLineDataGridView dataGridView

添加到
DataGridView
以填充空间存在许多问题:

  • 最明显的是您不能添加它们,因为您的DGV是
    数据绑定的。因此,您必须向
    数据源添加行。这不是很好

  • 不太明显:行不仅看起来像行,而且也像实行,行为也像实行,即可点击、可选择等。。这对于用户来说是令人困惑的,即使您阻止编辑,它仍然会邀请不太可能的交互

  • 最后:您仍然需要注意右边的灰色区域,至少如果有一些灰色区域或者用户可以调整列的大小

以下是我的建议:

要使灰色区域看起来不显眼,只需将
DataGridView
背景色设置为正常单元格的颜色:

 yourDGV.BackgroundColor = yourDGV.DefaultCellStyle.BackColor;

我建议改为将背景色设置为单元格背景色,这样用户就不会四处点击并选择重影单元格。请您解释一下,可能会重复