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