如图想要这么个效果,应该怎么做啊?

解决方案 »

  1.   

    我在CSDN中也下载了个控件试了 但是出来的结果是乱的 没有按照我的设计显示啊
      

  2.   

     1,继承DataGridView,添加表头信息类。
      2,添加CellPainting,代码如下:private void DataGridViewEx_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
            {
                if (e.RowIndex == -1)
                {
                 //   int w = dataGridView1.HorizontalScrollingOffset + dataGridView1.TopLeftHeaderCell.Size.Width + dataGridView1.Columns[0].Width + 10;
                    Rectangle newRect = new Rectangle(e.CellBounds.X + 1,
                   e.CellBounds.Y + 1, e.CellBounds.Width - 4,
                   e.CellBounds.Height - 4);                using (
                        Brush gridBrush = new SolidBrush(this.GridColor),
                        backColorBrush = new SolidBrush(e.CellStyle.BackColor))
                    {
                        using (Pen gridLinePen = new Pen(gridBrush))
                        {
                            // Erase the cell.
                            e.Graphics.FillRectangle(backColorBrush, e.CellBounds);                        // Draw the grid lines (only the right and bottom lines;
                            // DataGridView takes care of the others).
                            e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left,
                                e.CellBounds.Bottom - 1, e.CellBounds.Right - 1,
                                e.CellBounds.Bottom - 1);
                            if (e.ColumnIndex > -1 && topRow!=null&&topRow.Cells[e.ColumnIndex].ColSpan>1)
                            {
                                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
                                    e.CellBounds.Top + e.ClipBounds.Height / 2, e.CellBounds.Right - 1,
                                    e.CellBounds.Bottom);
                            }
                            else
                            {
                                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
                                                              e.CellBounds.Top, e.CellBounds.Right - 1,
                                                              e.CellBounds.Bottom);
                            }                        // Draw the inset highlight box.
                            //   e.Graphics.DrawRectangle(Pens.Blue, newRect);                        int scale = e.CellBounds.Height/3;
                            if (e.ColumnIndex > -1 && topRow.Cells[e.ColumnIndex].Text != null)
                            {
                                scale= e.CellBounds.Height / 2;
                                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - e.CellBounds.Height / 2, e.CellBounds.Right, e.CellBounds.Bottom - e.CellBounds.Height / 2);
                            }
                            // Draw the text content of the cell, ignoring alignment.                                              if (e.Value != null)
                            {
                                e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font,
                                    Brushes.Crimson, e.CellBounds.X + 2,
                                    e.CellBounds.Y + scale+ 2, StringFormat.GenericDefault);                        }
                            if (e.ColumnIndex > -1 &&  topRow.Cells[e.ColumnIndex].RelateIndex > -1 && topRow.Cells[e.ColumnIndex].Text!=null)
                        
                            {
                                Rectangle recCell = new Rectangle(e.CellBounds.X - 1 - topRow.Cells[e.ColumnIndex].SpanRowWith,
               e.CellBounds.Y + 1, topRow.Cells[e.ColumnIndex].SpanRowWith,
               e.CellBounds.Height / 2);
                                StringFormat sf = new StringFormat();                            sf.Alignment = StringAlignment.Center;
                                e.Graphics.DrawString(topRow.Cells[e.ColumnIndex].Text, e.CellStyle.Font, Brushes.Crimson, recCell, sf);                        }
                   
                            e.Handled = true;
                        }
                    }
                }        }
    调用方法
      dataGridViewEx1.TopRow.Cells[2].Text = "入库";
                dataGridViewEx1.TopRow.Cells[2].ColSpan = 2;
                dataGridViewEx1.TopRow.Cells[4].Text = "出库";
                dataGridViewEx1.TopRow.Cells[4].ColSpan = 2;
      

  3.   

    Spread 6.0 for Asp.Net and Windows Forms
    很好實現
      

  4.   

    Spread 6.0 这是收费的啊 
    有没有自己画的那种代码啊?求代码