mengubah padding kiri DataGridViewRow

Saya menggunakan DataGridView untuk mengisi data dari database. Saya memiliki dua "tipe" baris, satu menampilkan induk, dan kedua menampilkan anak. Saya ingin anak-anak menjorok ke kiri sehingga terlihat visual hubungan "orang tua-anak".

Bagaimana hal ini dapat dilakukan?


person bobek    schedule 24.08.2011    source sumber
comment
Hal ini dimungkinkan dengan menangani peristiwa pengecatan sel dan baris. Anda harus merasa nyaman menggunakan kelas Graphics.   -  person Igby Largeman    schedule 25.08.2011
comment
Ya, saya pikir saya mungkin bisa membedakan antara orang tua dan anak-anak secara grafis. Misalnya menghadirkan warna berbeda mungkin bisa menjadi solusi. Saya berharap untuk memindahkan barisnya sedikit; itu akan menjadi representasi arsitektur yang sangat bagus. Jika saya menemukan solusinya, saya akan mempostingnya di sini.   -  person bobek    schedule 25.08.2011
comment
Jika Anda memutuskan untuk mengubah warna baris saja, saya dapat memposting dan menjawab cara terbaik untuk melakukannya. Beri tahu saya jika Anda menginginkannya.   -  person Igby Largeman    schedule 26.08.2011
comment
Saya mungkin akan melakukannya, misalnya jika parentID != 0 mengubah warna latar belakang menjadi abu-abu dan warna font menjadi putih untuk seluruh baris.   -  person bobek    schedule 26.08.2011


Jawaban (1)


Karena Anda mengatakan Anda mungkin menyorot baris anak saja, berikut beberapa kode untuk melakukannya. Anda juga bisa mengubah warna latar saja pada acara RowsAdded, namun cara ini lebih rapi dan cepat (baris tidak harus dicat dua kali).

Tangani acara RowPrePaint DataGridView:

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;     
    }   
}

Saya biasanya lebih suka menggunakan kuas gradien untuk highlight khusus:

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

Dimana color1 dan color2 adalah warna apa pun yang Anda pilih.

person Igby Largeman    schedule 26.08.2011