如何在datagridview 中讓使用者自行放入圖片?
using System.IO;
namespace GridImage
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// 建立資料來源
DataTable dt = new DataTable("Demo");
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("FileName", typeof(string));
dt.Columns.Add("Photo", typeof(Image));
// image00.jpg 內容是"未上傳"字樣
dt.Rows.Add("1", "",Image.FromFile(@"D:\image00.jpg"));
dt.Rows.Add("2", "",Image.FromFile(@"D:\image00.jpg"));
dt.Rows.Add("3", "",Image.FromFile(@"D:\image00.jpg"));
dt.Rows.Add("4", "",Image.FromFile(@"D:\image00.jpg"));
dt.Rows.Add("5", "",Image.FromFile(@"D:\image00.jpg"));
dgvData.DataSource = dt;
// DataGridView 基礎設定
dgvData.AllowUserToAddRows = false;
dgvData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
// 設定 DataGridViewImageColumn 圖片寬度
dgvData.Columns["ColImage"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
// 設定 DataGridViewButtonColumn Text 屬性
DataGridViewButtonColumn btncol = dgvData.Columns["ColUpload"] as DataGridViewButtonColumn;
if (btncol != null)
{
// 表示全部 Button 的 Text 都顯示 "選擇圖片"
btncol.UseColumnTextForButtonValue = true;
btncol.Text = "選擇圖片";
}
}
private bool ImageCheck(string photopath)
{
// 判斷該圖檔是否存在
if (File.Exists(photopath) == false) return false;
// 只接受 JPG 圖檔
if (Path.GetExtension(photopath).ToUpperInvariant() != ".JPG") return false;
return true;
}
private void setImage()
{
OpenFileDialog OFD = new OpenFileDialog();
OFD.FileName = "請選取圖檔";
if (OFD.ShowDialog() != DialogResult.OK || string.IsNullOrEmpty(OFD.FileName)) return;
string photopath = OFD.FileName;
if (ImageCheck(photopath) == false) return;
dgvData.CurrentRow.Cells["ColFileName"].Value = photopath;
dgvData.CurrentRow.Cells["ColImage"].Value = Image.FromFile(photopath);
}
private void dgvData_CellClick(object sender, DataGridViewCellEventArgs e)
{
// 判斷是不是 DataGridViewButtonColumn 欄位
if (e.ColumnIndex == dgvData.Columns["colUpload"].Index) setImage();
}
}
}
一開始原本是想要對 ButtonColumn Click event 進行註冊,但沒想到沒有 Click event,後來在 MSDN 才發現,原來按下 ButtonColumn 會觸發的是 DataGirdView 的 Click event
- 延伸閱讀
- [C#] PictureBox 顯示圖片
沒有留言:
張貼留言