问题描述
想做一个如下图所示的效果:然后在网上找到了实现的代码usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Drawing.Drawing2D;namespaceWindowsFormsApplication3{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();this.dataGridView1.BackgroundImage=Image.FromFile("c:\2216400.jpg");this.dataGridView1.DefaultCellStyle.BackColor=Color.FromArgb(128,Color.White);this.dataGridView1.DefaultCellStyle.SelectionBackColor=Color.FromArgb(128,Color.Blue);}}publicclassMyDataGrid:DataGridView{protectedoverridevoidPaintBackground(Graphicsgraphics,RectangleclipBounds,RectanglegridBounds){graphics.DrawImageUnscaledAndClipped(this.BackgroundImage,gridBounds);}protectedoverridevoidOnCellPainting(DataGridViewCellPaintingEventArgse){if(e.RowIndex==-1||e.ColumnIndex==-1){return;}RectanglenewRect=newRectangle(e.CellBounds.X+1,e.CellBounds.Y+1,e.CellBounds.Width-4,e.CellBounds.Height-4);using(BrushgridBrush=newSolidBrush(this.GridColor),backColorBrush=newSolidBrush(e.CellStyle.BackColor),selectedColorBrush=newSolidBrush(e.CellStyle.SelectionBackColor)){using(PengridLinePen=newPen(gridBrush)){if(this.Rows[e.RowIndex].Selected){e.Graphics.FillRectangle(selectedColorBrush,e.CellBounds);}else{e.Graphics.FillRectangle(backColorBrush,e.CellBounds);}if(e.Value!=null){e.Graphics.DrawString((String)e.Value,e.CellStyle.Font,Brushes.Black,e.CellBounds.X+2,e.CellBounds.Y+2,StringFormat.GenericDefault);}}e.Handled=true;}}}}
但是最为关键的datagridview的backgroundimage属性根本就无法调用啊,这位大牛所写的this.BackgroundImage在智能输入里面根本就没有啊。强行这样写的话,就报错了。MSDN的关于DataGridView.BackgroundImage的注解在这里http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridview.backgroundimage%28v=VS.80%29.aspx但是光说“此属性支持.NET基础结构,但不适合在代码中直接使用”又没说该怎么用啊求大侠解惑,谢谢
解决方案
解决方案二:
你是要透明吗?DataGridView1.DefaultCellStyle.BackColor=Color.Transparent
解决方案三:
不是,我是需要在datagridview里面添加背景图片
解决方案四:
引用1楼chinajiyong的回复:
你是要透明吗?DataGridView1.DefaultCellStyle.BackColor=Color.Transparent
错了,你是要设置dgv的背景图片,其实你可以换个思路来想,比如把dgv放到一个pannel里面,设置pannel的背景图片,设置dgv透明。
解决方案五:
引用3楼chinajiyong的回复:
引用1楼chinajiyong的回复:你是要透明吗?DataGridView1.DefaultCellStyle.BackColor=Color.Transparent错了,你是要设置dgv的背景图片,其实你可以换个思路来想,比如把dgv放到一个pannel里面,设置pannel的背景图片,设置dgv透明。
诶,这个思路倒是不错,值得一试,谢谢。但是重写PaintBackground这个方法没行通还是让我感觉遗憾。
解决方案六:
引用4楼shisuoking的回复:
引用3楼chinajiyong的回复:引用1楼chinajiyong的回复:你是要透明吗?DataGridView1.DefaultCellStyle.BackColor=Color.Transparent错了,你是要设置dgv的背景图片,其实你可以换个思路来想,比如把dgv放到一个pannel里面,设置pannel的背景图片,设置dgv透明。……
试了一下,结果失败了。透明倒是透明了,背景图片也能看到了,但是如果数据一多,出现下拉条的话,一拉动就杯具了,整个页面都花了
解决方案七:
自己再顶一下