我有一个名为“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来获取所有员工的信息。 我错了什么。请帮帮我!
提前谢谢!