开发者

is it possible to paint line every empty line in DataGridView?

is it possible to paint line every empty line in DataGridView ?

ex:

123 | 444 | 555    
123 | 555 | 666

333 | 555 | 666

666 | 777 | 888

it will be:

123 | 444 | 555    
123 | 555 | 666开发者_StackOverflow社区
---------------    
333 | 555 | 666
---------------    
666 | 777 | 888

in WinForm - C#

thank's in advance


Pretty close to what you need. The row will be empty in your case. You can do some more optimizations with color, font etc.

alt text http://img72.imageshack.us/img72/6450/76236843.jpg

    private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
    {
        if (e.RowIndex == 2)
        {
            // Calculate the bounds of the row 
            int rowHeaderWidth = dataGridView1.RowHeadersVisible ?
                                 dataGridView1.RowHeadersWidth : 0;
            Rectangle rowBounds = new Rectangle(
                rowHeaderWidth,
                e.RowBounds.Top,
                dataGridView1.Columns.GetColumnsWidth(
                        DataGridViewElementStates.Visible) -
                        dataGridView1.HorizontalScrollingOffset + 1,
               e.RowBounds.Height);

            // Paint the row
            ControlPaint.DrawStringDisabled(e.Graphics, "- - - - - - - - - - - - - - - - - - - - - - - -", new Font("Times New Roman", 15f), Color.DarkGray, rowBounds, TextFormatFlags.Default);
        }
    }

Form2_Load() - Just to make the code complete so that you can just copy paste to reproduce.

private void Form2_Load(object sender, EventArgs e)
        {
            this.dataGridView1.ColumnCount = 4;
            this.dataGridView1.Columns[0].Name = "Recipe";
            this.dataGridView1.Columns[0].SortMode =
                DataGridViewColumnSortMode.NotSortable;
            this.dataGridView1.Columns[1].Name = "Category";
            this.dataGridView1.Columns[2].Name = "Main Ingredients";
            this.dataGridView1.Columns[3].Name = "Rating";

            // Hide the column that contains the content that spans 
            // multiple columns.
            this.dataGridView1.Columns[2].Visible = false;

            // Populate the rows of the DataGridView.
            string[] row1 = new string[]{"Meatloaf", "Main Dish",
            "1 lb. lean ground beef, 1/2 cup bread crumbs, " + 
            "1/4 cup ketchup, 1/3 tsp onion powder, 1 clove of garlic, " +
            "1/2 pack onion soup mix, dash of your favorite BBQ Sauce",
            "****"};
            string[] row2 = new string[]{"Key Lime Pie", "Dessert", 
            "lime juice, whipped cream, eggs, evaporated milk", "****"};
            string[] row3 = new string[]{"Orange-Salsa Pork Chops", 
            "Main Dish", "pork chops, salsa, orange juice, pineapple", "****"};
            string[] row4 = new string[]{"Black Bean and Rice Salad", 
            "Salad", "black beans, brown rice", "****"};
            string[] row5 = new string[]{"Chocolate Cheesecake", 
            "Dessert", "cream cheese, unsweetened chocolate", "***"};
            string[] row6 = new string[]{"Black Bean Dip", "Appetizer",
            "black beans, sour cream, salsa, chips", "***"};
            object[] rows = new object[] { row1, row2, row3, row4, row5, row6 };
            foreach (string[] rowArray in rows)
            {
                this.dataGridView1.Rows.Add(rowArray);
            }
        }


I'm not sure if you would be able to do what you want but I suggest looking at the RowPrePaint and RowPostPaint events of the DataGridView and possibly also the CellPainting event.

The following link might be helpful: http://msdn.microsoft.com/en-us/library/85kxk29c.aspx

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜