C#winform 用DataGridView显示大量图片

最近在做项目时,有个需求是在winform上面显示大量的小图片,查了下资料,可以用listview显示,我试了下,发现的确能显示,可是我想知道每张图片的位置时,就很困难,我本来就是个新手,可能存在很简单的办法解决这个问题,只是我不知道。然后我又查了说DataGridView能显示,试了下果然满足我的需求,废话不多说,马上上干货。

我是用imagelist控件来管理图片,这个控件在winform那里直接添加,添加方法我不多说,大家可以百度。然后就是添加一个datagridview,如图。

C#winform 用DataGridView显示大量图片_第1张图片


然后写代码。

private void showpicture(byte[] fileArray)
        {
            List imagePathList = new List();//获取列表图片路径
            DirectoryInfo dir = new DirectoryInfo("E:\\project\\piano\\ListViewTest\\images");//获取目录
            FileInfo[] fileinfo = dir.GetFiles("*.png");//获取文件夹中的图片文件

            //防止图片失真
            this.imageList1.ColorDepth = ColorDepth.Depth32Bit;

            foreach (FileInfo file in fileinfo)
            {
                imagePathList.Add(file.FullName);//图片路径
                this.imageList1.Images.Add(Image.FromFile(file.FullName));
            }

            //增加5行5列
            for (int i = 0; i < 5; i++)
            {
                DataGridViewImageColumn ic = new DataGridViewImageColumn();
                this.dataGridView1.Columns.Add(ic);//增加列,用于显示图片
                
                this.dataGridView1.Rows.Add();//增加行

                this.dataGridView1.Columns[i].DefaultCellStyle.NullValue = null;//当没有数据时,不会显示红叉,cell.Value 必须是null,对于空串这句无效
                this.dataGridView1.Columns[i].Width = 42;//限定列宽
                this.dataGridView1.Rows[i].Height = 42;//限定行宽
                
            }

            this.dataGridView1[0, 0].Value = imageList1.Images[2];//显示imagelist中的图片
            this.dataGridView1[0, 1].Value = imageList1.Images[5];
            this.dataGridView1[1, 0].Value = imageList1.Images[5];


            //this.dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;//不显示网格
            //this.dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);//自动调整列宽
            //this.dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders);//自动调整行宽

        }

说明:我是先获取图片的路径,然后转换为image格式存在imagelist中,当显示时,直接从imagelist中获取就可以了。要用DataGridView来显示,要先增加行列,也可以看作是一个表格,由多个单元格组成。因为我要显示的图片是42*42,所以我把行列的宽度设为42了,最后就是你要那个单元格显示,就往哪个单元格赋images的值,结果如下图所示。

C#winform 用DataGridView显示大量图片_第2张图片

如图,分别在三个单元格中显示了3张小图片。

(这里说下,datagridview显示的方法还可以通过绑定数据源来实现,这样好像就不用添加行列,具体大家可以百度下,我还没试过)

那么问题又来了,图片的最左边和做上边的是什么来的,能不能去掉啊,还有最下面的能不能也去掉,还有我不想显示网格咋办?

其实这些都可以在DataGridView中的属性可以设置的,当然用代码也可以。

this.dataGridView1.ColumnHeadersVisible = false;//不显示列标题
this.dataGridView1.RowHeadersVisible = false;//行
this.dataGridView1.AllowUserToDeleteRows = false;
this.dataGridView1.AllowUserToAddRows = false;//禁止增加行
this.dataGridView1.AllowUserToResizeColumns = false;//禁止调整列大小
this.dataGridView1.AllowUserToResizeRows = false;//禁止调整行大小

this.dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;//不显示网格

调整后如下图。

C#winform 用DataGridView显示大量图片_第3张图片

我前面限定了单元格的大小,如果想让它自动调整大小,那可以用以下代码。

this.dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);//自动调整列宽

this.dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders);//自动调整行宽

其实这些都是DataGridView中的属性,大家有兴趣的可以了解下,我是菜鸟一个,懂得也不多,就不多说啦。


你可能感兴趣的:(C#)