在插入DatagridviewImageColumn之前,格式化DataSource中每个Image的ImageLayout

时间:2017-10-13 03:12:27

标签: winforms datagridview datagridviewimagecolumn

我有一个名为“NHANVIEN”的表来显示所有员工,在我的表中我有一个varbinary数据类型的列来存储员工的图像。我写了一个方法来获取所有员工并将其填入我的DataGridView。但是当显示DataGridView时,DataGridViewImageColumn总是将我的员工图像格式化为Stretch。 我试图用“for循环”循环我的DataGridView并将我的DataGridViewImageColumnCellLayout格式化为Normal但没有发生任何事情。

这是我填充DataGridView的方法

  private void FillGridViewThongTinNhanVien()
    {
        dgvThongTinNhanVien.Rows.Clear();
        dgvThongTinNhanVien.Columns.Clear();


        DataGridViewTextBoxColumn manv = new DataGridViewTextBoxColumn();
        manv.HeaderText = "Mã NV";
        manv.DataPropertyName = "MaNhanVien";//EmployeeID, the same name in database
        dgvThongTinNhanVien.Columns.Add(manv);
        DataGridViewTextBoxColumn chucvu = new DataGridViewTextBoxColumn();
        chucvu.HeaderText = "Chức vụ";
        chucvu.DataPropertyName = "ChucVu";//the same column name in database
        dgvThongTinNhanVien.Columns.Add(chucvu);
        DataGridViewTextBoxColumn tennv = new DataGridViewTextBoxColumn();
        tennv.HeaderText = "Tên NV";
        tennv.DataPropertyName = "HoTen";//the same column name in database
        dgvThongTinNhanVien.Columns.Add(tennv);
        DataGridViewTextBoxColumn diachi = new DataGridViewTextBoxColumn();
        diachi.HeaderText = "Địa chỉ";
        diachi.DataPropertyName = "DiaChi";//the same column name in database
        dgvThongTinNhanVien.Columns.Add(diachi);
        DataGridViewTextBoxColumn email = new DataGridViewTextBoxColumn();
        email.HeaderText = "Email";
        email.DataPropertyName = "Email";//the same column name in database
        dgvThongTinNhanVien.Columns.Add(email);
        DataGridViewCheckBoxColumn gioitinh = new DataGridViewCheckBoxColumn();
        gioitinh.HeaderText = "Giới tính";
        gioitinh.DataPropertyName = "GioiTinh";//the same column name in database
        dgvThongTinNhanVien.Columns.Add(gioitinh);
        DataGridViewTextBoxColumn ngayvaolam = new DataGridViewTextBoxColumn();
        ngayvaolam.HeaderText = "Ngày vào làm";
        ngayvaolam.DataPropertyName = "NgayVaoLam";//the same column name in database
        dgvThongTinNhanVien.Columns.Add(ngayvaolam);
        DataGridViewImageColumn hinh = new DataGridViewImageColumn();
        hinh.HeaderText = "Hình";
        hinh.DataPropertyName = "Hinh";//the same column name in database
        hinh.ImageLayout = DataGridViewImageCellLayout.Normal;
        dgvThongTinNhanVien.Columns.Add(hinh);

        QLKSDataContext db = new QLKSDataContext();//LINQ to SQL class
        var ttNhanVien = db.spGetAllNhanVien();//get Employee list from Store Procedure

        byte[] image;
        MemoryStream ms = new MemoryStream();
        Image img = Properties.Resources.NoImage;//set default image if the recieved image of each employee is null
        foreach (var nv in ttNhanVien)
        {
            if (nv.Hinh != null)
                image = (byte[])nv.Hinh.ToArray();
            else {
                    img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

                    image = (byte[])(ms.ToArray());
                 }                                
            dgvThongTinNhanVien.Rows.Add(nv.MaNhanVien, nv.ChucVu, nv.HoTen, nv.DiaChi, nv.Email, nv.GioiTinh, nv.NgayVaoLam, image);                               
        }
        for (int i = 0; i < dgvThongTinNhanVien.Columns.Count; i++)
        {
            if (dgvThongTinNhanVien.Columns[i] is DataGridViewImageColumn)
            {
                ((DataGridViewImageColumn)dgvThongTinNhanVien.Columns[i]).ImageLayout = DataGridViewImageCellLayout.Normal;
                break;
            }
        }
        //dgvThongTinNhanVien.DataSource = ttNhanVien;//Set datasource for DataGridView Employee
    }

因为我的员工不能插入任何图像,所以我必须将这些图像从我的项目资源转换为默认图像,并将其显示在DataGridView上。

我使用LinQ和Store Procedure来获取所有员工的信息。 我错了什么。请帮帮我!

提前谢谢!

0 个答案:

没有答案