更改DataGridViewRow的左边距

时间:2011-08-24 17:16:07

标签: c# winforms datagridview

我正在使用DataGridView来填充数据库中的数据。我有两个“类型”的行,一个显示父级,第二个显示子级。我希望这些孩子能够左缩,所以它必须具有“亲子关系”的视觉效果。

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

既然你说你可能只是突出显示子行,这里有一些代码可以做到这一点。您也可以只更改RowsAdded事件的背景颜色,但这种方式更整洁,更快(行不需要绘制两次)。

处理DataGridView的RowPrePaint事件:

private void dataGrid_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
    // use whatever your row data type is here
    MyDataType item = (MyDataType)(dataGrid.Rows[e.RowIndex].DataBoundItem);

    // only highlight children
    if (item.parentID != 0)
    {
        // calculate the bounds of the row
        Rectangle rowBounds = new Rectangle(
            dataGrid.RowHeadersVisible ? dataGrid.RowHeadersWidth : 0, // left
            e.RowBounds.Top, // top
            dataGrid.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - dataGrid.HorizontalScrollingOffset + 1, // width 
            e.RowBounds.Height // height
        ); 


        // if the row is selected, use default highlight color
        if (dataGrid.Rows[e.RowIndex].Selected)
        {
            using (Brush brush = new SolidBrush(dataGrid.DefaultCellStyle.SelectionBackColor))
                e.Graphics.FillRectangle(brush, rowBounds);
        }
        else // otherwise use a special color
            e.Graphics.FillRectangle(Brushes.PowderBlue, rowBounds);


        // prevent background from being painted by Paint method
        e.PaintParts &= ~DataGridViewPaintParts.Background;     
    }   
}

我实际上通常更喜欢使用渐变画笔进行特殊突出显示:

using (Brush brush = new LinearGradientBrush(rowBounds, color1, color2,  
       LinearGradientMode.Horizontal))
{
    e.Graphics.FillRectangle(brush, rowBounds);
}

color1color2将是您选择的任何颜色。