Отформатируйте ImageLayout каждого изображения в DataSource перед вставкой в 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 и процедуру хранения, чтобы получить информацию обо всех сотрудниках. Был ли я что-то не так? Пожалуйста, помогите мне!.
Заранее спасибо!