星期一, 10月 27, 2014

[C#] DataGridView 中顯示圖片

論壇問題
如何在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();
        }
    }
}
[C#] DataGridView 中顯示圖片

一開始原本是想要對 ButtonColumn Click event 進行註冊,但沒想到沒有 Click event,後來在 MSDN 才發現,原來按下 ButtonColumn 會觸發的是 DataGirdView 的 Click event

[C#] DataGridView 中顯示圖片-1

沒有留言:

張貼留言