DataGridView空白区域用网格填充示例
编辑:dnawo 日期:2009-10-23

如上图示,当行数不够时,DataGridView下部分是一块空白区域,不怎么美观,就想用网格来填充。最后的思路是手工绘制线条来完成,只要能找着下图几个红色位置的坐标,其他就好办了:

最终效果:

实现代码:
复制内容到剪贴板
程序代码

/// <summary>
/// 绘制网格填充空白区域
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
DataGridView myDataGridView = (DataGridView)sender;
if (myDataGridView.Rows.Count > 0)
{
int i = myDataGridView.ColumnHeadersHeight;//标题行高
int j = myDataGridView.Rows.GetRowsHeight(DataGridViewElementStates.Visible); //所有可见行总高
int k = myDataGridView.Height; //控件高度
int l = myDataGridView.Rows.GetLastRow(DataGridViewElementStates.Visible);//最后一行索引
int count = myDataGridView.Columns.Count;//列总数
int width = 0;
//当网格未充满控件时才画线
if (i + j < k)
{
using (Brush gridBrush = new SolidBrush(myDataGridView.GridColor))
{
using (Pen gridLinePen = new Pen(gridBrush))
{
//处理标题列
if (myDataGridView.RowHeadersVisible)
{
width = myDataGridView.RowHeadersWidth;
e.Graphics.DrawLine(gridLinePen, width, i + j, width, k);
}
else
{
width = 1;
}
//处理正常列
for (int index = 0; index < count; index++)
{
if (myDataGridView.Columns[index].Visible)
{
width += myDataGridView.Columns[index].Width;
e.Graphics.DrawLine(gridLinePen, width, i + j, width, k);
}
}
}
}
}
}
}
/// 绘制网格填充空白区域
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
DataGridView myDataGridView = (DataGridView)sender;
if (myDataGridView.Rows.Count > 0)
{
int i = myDataGridView.ColumnHeadersHeight;//标题行高
int j = myDataGridView.Rows.GetRowsHeight(DataGridViewElementStates.Visible); //所有可见行总高
int k = myDataGridView.Height; //控件高度
int l = myDataGridView.Rows.GetLastRow(DataGridViewElementStates.Visible);//最后一行索引
int count = myDataGridView.Columns.Count;//列总数
int width = 0;
//当网格未充满控件时才画线
if (i + j < k)
{
using (Brush gridBrush = new SolidBrush(myDataGridView.GridColor))
{
using (Pen gridLinePen = new Pen(gridBrush))
{
//处理标题列
if (myDataGridView.RowHeadersVisible)
{
width = myDataGridView.RowHeadersWidth;
e.Graphics.DrawLine(gridLinePen, width, i + j, width, k);
}
else
{
width = 1;
}
//处理正常列
for (int index = 0; index < count; index++)
{
if (myDataGridView.Columns[index].Visible)
{
width += myDataGridView.Columns[index].Width;
e.Graphics.DrawLine(gridLinePen, width, i + j, width, k);
}
}
}
}
}
}
}
评论: 1 | 引用: 0 | 查看次数: 10994





下面的竖线会被擦除,该怎么修改
dnawo 回复 [2012-05-23 09:12 AM]

抱歉,很久没弄这个了:)
发表评论
请登录后再发表评论!